2010-10-26 96 views
-5

我已经包含适当C++类的实例化问题

头文件, 部首加尔

,但我不能实例化特定类

得到错误

error C2065: 'ClassName' : undeclared identifier 



Sample Code 

Class A{ 

//instantiate class B 

} 


Class B { 


//need to instantiate Class A 

} 
+0

我可以实例化其他类 – Sudantha 2010-10-26 11:23:42

+0

你会粘贴任何代码吗?无法工作的最小完整示例 – 2010-10-26 11:25:00

+5

无代码,无Cookie。 – sbi 2010-10-26 11:26:55

回答

1

因为我们还没有发布对我们有什么真正的代码实际上使用的,我带你去一个猜测,你的代码实际上是这样的:

啊:

#ifndef HEADER_A 
#define HEADER_A 

#include "B.h" 
class A { 
private: 
    B someMember; 
}; 

了Bh :

#ifndef HEADER_B 
#define HEADER_B 
#include "A.h" 

class B { 
public: 
    doSomething(A param); 
}; 

B.cpp:

#include "B.h" 
#include "A.h" 

void B::doSomething(A param) { } 

正如Flinsch所说,你需要有前向声明来避免包含排序问题。最简单的方法是在.h文件中删除循环包含,并将正向声明(class B;class A;并入A.h和B.h)。

1

顺便说一句。在类定义结束时,您没有;

+0

谢谢,但它完成:)它只是描述一个场景 – Sudantha 2010-10-26 11:34:28

+5

不,你描述没有情况,因为没有真正的代码,没有实例写入。你的问题对我们来说只是一个模糊的笑话。 – 2010-10-26 11:38:06

1

根据我的理解,类A和类B之间存在循环依赖关系。因此,您需要对这两个类(或两者)中的至少一个使用前向声明。

+0

我的类在单独的.cpp文件中有什么想法? – Sudantha 2010-10-26 11:35:01

+0

是的,我已经完成了所有这些! – Sudantha 2010-10-26 11:39:53

+0

是的,这是每个类都有单独的.cpp文件的标准过程。 *你做了什么*“所有人”?你真的不想得到帮助,是吗? – Flinsch 2010-10-26 11:48:11