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

来源:百度知道 编辑:UC知道 时间:2024/05/18 06:41:30
/*////////////////////////////////////////////////////
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"

us

在类的声明里不要声明另一个类的对象,而要声明类的指针,比如
class A{
...
class B b;
...
};
是错的,因为在编译A时,无法确定B的大小,应该用
class A{
...
class B *b;
...
};
因为指针大小是固定的。

另外,嵌套声明时,在其中一个类的声明前面加上另一个类的预声明即可。
比如
在A.h里面写
class B;
class A{
...
};
在B.h里面写
class B{
...
};

一个还没定义的类作为另外一个类的成员时只能是指针或引用类型.而且你还要做向前申明类.