C++代码组织上的问题,交叉引用后编译报错说未定义标识符

/*////////////////////////////////////////////////////PlusA.h*/#pragmaonce#include<st... /*////////////////////////////////////////////////////
PlusA.h
*/
#pragma once

#include <string>
#include <iostream>
#include "PlusB.h"

using namespace std;

class CPlusA
{
public:
CPlusA(const string& str);
virtual ~CPlusA(void);
CPlusB& GetB(void);

private:
CPlusB m_b;
string m_str;
};

/*////////////////////////////////////////////////////
PlusA.cpp
*/
#include "StdAfx.h"
#include ".\plusa.h"

CPlusA::CPlusA(const string& str):m_b(str), m_str(str)
{}

CPlusA::~CPlusA(void)
{}

CPlusB& CPlusA::GetB(void)
{
return this->m_b;
}

/*////////////////////////////////////////////////////
PlusB.h
*/
#pragma once

#include <string>
#include <iostream>
#include "PlusA.h"

using namespace std;

class CPlusB
{
public:
CPlusB(const string& str);
virtual ~CPlusB(void);
CPlusA& GetA(void);

private:
CPlusA m_a;
string m_str;
};

/*////////////////////////////////////////////////////
PlusB.cpp
*/
#include "StdAfx.h"
#include ".\plusb.h"

CPlusB::CPlusB(const string& str):m_a(str), m_str(str)
{}

CPlusB::~CPlusB(void)
{}

CPlusA& CPlusB::GetA(void)
{
return this->m_a;
}

这四个文件放到一个项目里编译时报:
PlusA.h(14): error C2143: 语法错误 : 缺少“;”(在“&”的前面)
PlusB.h(14): error C2143: 语法错误 : 缺少“;”(在“&”的前面)
PlusB.h(17): error C2146: 语法错误 : 缺少“;”(在标识符“m_a”的前面)
PlusA.h(17): error C2146: 语法错误 : 缺少“;”(在标识符“m_b”的前面)
PlusA.h(14): error C2501: “CPlusA::CPlusB” : 缺少存储类或类型说明符
PlusA.h(17): error C2501: “CPlusA::CPlusB” : 缺少存储类或类型说明符
PlusA.h(14): error C2501: “CPlusA::GetB” : 缺少存储类或类型说明符
PlusA.h(17): error C2501: “CPlusA::m_b” : 缺少存储类或类型说明符
PlusB.h(14): error C2501: “CPlusB::CPlusA” : 缺少存储类或类型说明符
PlusB.h(17): error C2501: “CPlusB::CPlusA” : 缺少存储类或类型说明符
PlusB.h(14): error C2501: “CPlusB::GetA” : 缺少存储类或类型说明符
PlusB.h(17): error C2501: “CPlusB::m_a” : 缺少存储类或类型说明符
PlusB.h(14): warning C4183: “GetA”: 缺少返回类型;假定为返回“int”的成员函数
PlusA.h(14): warning C4183: “GetB”: 缺少返回类型;假定为返回“int”的成员函数
展开
 我来答
忘至白葬不情必0T
2007-11-14 · TA获得超过3万个赞
知道大有可为答主
回答量:1.1万
采纳率:90%
帮助的人:1.2亿
展开全部
在类的声明里不要声明另一个类的对象,而要声明类的指针,比如
class A{
...
class B b;
...
};
是错的,因为在编译A时,无法确定B的大小,应该用
class A{
...
class B *b;
...
};
因为指针大小是固定的。

另外,嵌套声明时,在其中一个类的声明前面加上另一个类的预声明即可。
比如
在A.h里面写
class B;
class A{
...
};
在B.h里面写
class B{
...
};
12f3210
2007-11-14 · TA获得超过299个赞
知道小有建树答主
回答量:443
采纳率:0%
帮助的人:433万
展开全部
一个还没定义的类作为另外一个类的成员时只能是指针或引用类型.而且你还要做向前申明类.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式