Duanxx的C++学习: 使用类没有被定义 原因及解决方法

今天,随着C++写的神经网络算法。我发现了一个很令人费解的问题,下面的描述一般地描述,例如:

我有两个类ClassA和ClassB,它们分别有成员变量a。b;

ClassA有一个函数是这种:FunctionA(const ClassB &classB)

ClassB中也有一个类似的函数:FunctionB(const ClassA&classA)

一開始代码类似于这种,可是报错了,原因非常easy,ClassB在FunctionA使用ClassB的时候,ClassB仅仅有声明,未定义。

class ClassB; ///<提前声明ClassB

class ClassA
{
public:
	void FunctionA(const ClassB &classB);
	int a;
};

void ClassA::FunctionA(const ClassB &classB)
{
	int k = classB.b;  ///<这里报错了,使用了没有定义的ClassB
}

class ClassB
{
public:
	void FunctionB(const ClassA *classA){int k = classA->a;};
	int b;
};

void FunctionB(const ClassA &classA)
{
	int k = classA.a;
}

int main()
{
	return 0;
}

既然问题是:ClassB仅仅有声明,未定义。

为了解决上面这个问题,这里须要做一件事情:

就是将FunctionA的实现。放在ClassB的定义之后就能够了。

class ClassB; ///<提前声明ClassB

class ClassA
{
public:
	void FunctionA(const ClassB &classB);
	int a;
};

class ClassB
{
public:
	void FunctionB(const ClassA *classA){int k = classA->a;};
	int b;
};

///< FunctionA 放在ClassB的定义之后就没有问题了
void ClassA::FunctionA(const ClassB &classB)
{
	int k = classB.b;
}

void FunctionB(const ClassA &classA)
{
	int k = classA.a;
}

int main()
{
	return 0;
}

版权声明:本文博客原创文章,博客,未经同意,不得转载。

时间: 2024-10-11 12:00:26

Duanxx的C++学习: 使用类没有被定义 原因及解决方法的相关文章

zend studio中ctrl+鼠标左键无法转到类或函数定义文件的解决方法

zend studio中ctrl+鼠标左键无法转到类或函数定义文件的解决方法: zendstudio 时常 无法ctrl+左键 跳转 到函数源 代码 是创建工程的方式造成的,很有可能是把先前存在的工程以file的形式导入, zendstudio 就把工程当作文档来处理了.解决的办法是: 右键点击工程->configure->add php support 然后系统会自动rebuild工程/workspace.至此,问题解决! 如果你想要zendstudio支持javascript的语法高亮和流

红外遥控库IRremote的IRsend类sendRaw函数溢出问题及其解决方法

最近在调试红外遥控格力空调,在论坛中学到了不少东西.参考: (1)<解决问题系列(4)--红外编码分析利器使用> (2)<315Mhz模块传输替代315Mhz遥控器> 调试环境: 软件:Arduino IDE 1.0 硬件:Arduino uno r3 问题分> 我使用的遥控器型号是YAD0F. 在使用逻辑分析仪dump出原始码之后,使用sendRaw函数来发送原始码,发现空调没有反应.原始码如下: 9004,4499,699,1609,697,511,695,511,695

在同一个类中,一个方法调用另外一个有注解(比如@Async,@Transational)的方法,注解失效的原因和解决方法

在同一个类中,一个方法调用另外一个有注解(比如@Async,@Transational)的方法,注解是不会生效的. 比如,下面代码例子中,有两方法,一个有@Transational注解,一个没有.如果调用了有注解的addPerson()方法,会启动一个Transaction:如果调用updatePersonByPhoneNo(),因为它内部调用了有注解的addPerson(),如果你以为系统也会为它启动一个Transaction,那就错了,实际上是没有的. @Service public cla

Netty handler处理类无法使用@Autowired注入bean的解决方法

问题由来: 公司有个项目用到netty作为websocket的实现,最近打算部署双机,这使得原来保存在内存中的Channel信息不再可行,需要保存在redis中,改造过程中发现通过@Autowired注入进来的JedisClient类无法使用,外部表现为jedisClient对象为null 解决过程: 1.一开始以为是spring配置引入先后顺序的问题,导致netty启动的时候jedisClient还没实例化好,调整后发现问题依旧 2.之后百度发现有不少人遇到这个问题,有回答说netty中无法使

学习C++ -&gt; 类(Classes)的定义与实现

一."类" 的介绍 在C++中, 用 "类" 来描述 "对象", 所谓的"对象"是指现实世界中的一切事物.那么类就可以看做是对相似事物的抽象, 找到这些不同事物间的共同点, 如自行车和摩托车, 首先他们都属于"对象", 并且具有一定得相同点, 和一些不同点, 相同点如他们都有质量.都有两个轮子, 都是属于交通工具等."都有质量"."两个轮子"属于这个对象的属性, 而&

【转载】学习C++ -&gt; 类(Classes)的定义与实现

一."类" 的介绍    在C++中, 用 "类" 来描述 "对象", 所谓的"对象"是指现实世界中的一切事物.那么类就可以看做是对相似事物的抽象, 找到这些不同事物间的共同点, 如自行车和摩托车, 首先他们都属于"对象", 并且具有一定得相同点, 和一些不同点, 相同点如他们都有质量.都有两个轮子, 都是属于交通工具等."都有质量"."两个轮子"属于这个对象的属性,

基于继承类的属性模版中无法绑定的原因和解决方法

这个的晚上想学学WPF 做一个类似于ERP 左边菜单.构思一下思路 ...... 创建一个类基于Expander类. 1 public class ExpanderBox : Expander 2 { 3 #region 定义依赖属性 4 5 6 //定义ItemsSource数据源 7 public static readonly DependencyProperty ItemsSourcesProperty = DependencyProperty.Register("ItemsSource

swift------导入OC三方类找不到头文件的解决方法

1.首先新建个 swift工程 2.在swift 中新建 OC 类 比如新建 Request 类,会自动生成个.XXXX-Bridging-Header 类: 3.让后把 导入的第三方头文件导入进去.例如: #import "AFNetworking.h"  但是他会提示找不到 4. 在 build Seting   搜索L:User Header Search Paths 5.在 User Header Search Paths 添加:${SRCROOT} , 选择.Recursiv

学习Android过程中遇到的问题及解决方法——电话监听

也许有时你会有这样一个需求:通电话时有一个重要的事需要记下来或者和一个陌生人特别是大骗子通话时,这是就想如果能把通话录下来就方便多了.(这才是我写这个代码的目的!!!) 在此过程中,犯了一个很大的错误.对电话状态还不熟悉就开始编程,使得我就算编写正确也出现各种bug. 先将代码列出来,供大家参考,然后解释错误和相关知识. activity_main.xml: 1 <?xml version="1.0" encoding="utf-8"?> 2 <L