读书人

貌似C++代码组织上的有关问题,交叉引用

发布时间: 2012-03-01 10:25:46 作者: rapoo

貌似C++代码组织上的问题,交叉引用后编译报错说未定义标识符??
大哥们给看看如何才能改正?

/*////////////////////////////////////////////////////
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”的成员函数

[解决办法]
在一个头文件里面对另外一个类使用一次前向声明,就不要包含头文件了
[解决办法]
////////////////////////////
新建一个COMMON.h
#ifndef _COMMON_H_
#define _COMMON_H_

class A;
class B;

#endif

///////////////////////////
A.h

#include "common.h"
#include "b.h"
//////////////////////////
b.h
#include "common.h"
#include "a.h"
//////////////////////////

这样就搞定了!

读书人网 >C++

热点推荐