2012-03-14 46 views
-2

我想实现一个类的指针为类成员和方法返回指针,但在编译我得到“语法错误:缺少';'之前 '*'”和 “缺少类型说明符 - 假定为int。注意:C++不支持默认int” 错误C++类的方法返回指针到用户定义的类实例

下面的代码:
Main.cpp的:

#include "AClass.h" 
#include "BClass.h" 

int main (int argc, const char* argv[]) 
{ 
    AClass a; 
    BClass b; 
    return 0; 
} 

AClass.h:

#ifndef ACLASS_H 
#define ACLASS_H 

#include "BClass.h" 

class AClass 
{ 
public: 
    BClass* getB(); 
    void setB (BClass* inst); 
private: 
    BClass* b; 
}; 

#endif 

BClass.h:

#ifndef BCLASS_H 
#define BCLASS_H 

#include "AClass.h" 

class BClass 
{ 
public: 
    AClass* getA(); 
    void setA (AClass* inst); 
private: 
    AClass* a; 
}; 

#endif 

我还没有充实OU t类与cpp文件,我得到一串错误: 如果我创建C++文件并定义一切,这些都没有关系,这些错误仍然存​​在。

1>------ Build started: Project: memberUDFpointers, Configuration: Debug Win32 ------ 
1> Main.cpp 
1>e:\documents\cpp projects\memberudfpointers\memberudfpointers\bclass.h(9): error C2143: syntax error : missing ';' before '*' 
1>e:\documents\cpp projects\memberudfpointers\memberudfpointers\bclass.h(9): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
1>e:\documents\cpp projects\memberudfpointers\memberudfpointers\bclass.h(9): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
1>e:\documents\cpp projects\memberudfpointers\memberudfpointers\bclass.h(9): warning C4183: 'getA': missing return type; assumed to be a member function returning 'int' 
1>e:\documents\cpp projects\memberudfpointers\memberudfpointers\bclass.h(10): error C2061: syntax error : identifier 'AClass' 
1>e:\documents\cpp projects\memberudfpointers\memberudfpointers\bclass.h(12): error C2143: syntax error : missing ';' before '*' 
1>e:\documents\cpp projects\memberudfpointers\memberudfpointers\bclass.h(12): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
1>e:\documents\cpp projects\memberudfpointers\memberudfpointers\bclass.h(12): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
    ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== 

我已经看了很多不同的帖子,但我仍然在这个问题上摸不着头。 有人可以给我一个线索吗?

+1

你有圆形包容;在头文件中使用前向声明而不是'#include'。 – ildjarn 2012-03-14 22:41:37

+1

循环依赖,前向声明;这应该让你开始。 – Nim 2012-03-14 22:42:25

+0

[C++中的循环依赖]可能的重复(http://stackoverflow.com/questions/4018816/circular-dependency-in-c) – 2012-03-14 22:43:38

回答

1

您对AClass的定义取决于BClass的定义,而BClass的定义取决于AClass的定义。在另一个已经定义之前,你不能定义一个。

幸运的是,实际的类只使用指针给对方,这样你就可以只需要声明一个类:

class A; 

class Bclass { 
    // ... 
}; 

,并从那里走。

+0

啊所以这就是为什么错误只会在BClass.h上弹出。这非常合理。谢谢! – 2012-03-14 23:25:42