关于g++在处理相互依赖的类时的有关问题
关于g++在处理相互依赖的类时的问题
小弟在c++中最怕面对的就是两个类相互依赖的问题。虽然有一些解决方法,比如一个#include而另一个向前声明,但是并不总是管用,尤其是再碰到静态函数以及模板函数。
我在vs2010下建立class A和class B
//A.h
//B.h
//main.cpp
结果是可行的。
但是这个放到linux服务器上g++的话,就会出现很奇怪的问题。(我的服务器代码是三个类,DCache类和Log类互相依赖,依赖的内容为一些成员模板函数,Org类调用DCache的成员函数)
1.如果DCache类和Log类互相#include头文件,生成Org类的.o文件的时后,会提示DCache.h中的DCache类是未定义的。(DCache.h和Log.h都有#progma once)
2.如果我在DCache.h中#include “Log.h”,而Log.h中向前声明Class DCache。则会出现invalid use of incomplete type错误和 class forward declaration错误
现在的做法就是把耦合的代码复制出来两份,切断Log对DCache的依赖。但是维护两份代码的工作量还是不小的。有没有什么方法实现互相#include的啊。毕竟第一个例子是成功地。
------解决思路----------------------
抱歉,今天才有空上论坛。 这不是C++ 11的。
小弟在c++中最怕面对的就是两个类相互依赖的问题。虽然有一些解决方法,比如一个#include而另一个向前声明,但是并不总是管用,尤其是再碰到静态函数以及模板函数。
我在vs2010下建立class A和class B
//A.h
#pragma once
#include "B.h"
namespace NSA
{
class A
{
public:
A(void){}
~A(void){}
template <class T>
void memberA(){cout << "MA" << endl;}
template <class T>
static void StaticA(){cout << "SA" << endl;}
template <class T>
void callB()
{
B b;
b.memberB<T>();
B::StaticB<T>();
}
};
}
//B.h
#pragma once
#include "A.h"
class B
{
public:
B(void);
~B(void);
template <class T>
void memberB(){cout << "MB" << endl;}
template <class T>
static void StaticB(){cout << "SB" << endl;}
template <class T>
void callA()
{
A a;
a.memberA<T>();
A::StaticA<T>();
}
};
//main.cpp
#include "A.h"
#include "B.h"
using namespace std;
using namespace NSA;
int main()
{
A a;
B b;
a.callB<int>();
b.callA<int>();
}
结果是可行的。
MB
SB
MA
SA
请按任意键继续. . .
但是这个放到linux服务器上g++的话,就会出现很奇怪的问题。(我的服务器代码是三个类,DCache类和Log类互相依赖,依赖的内容为一些成员模板函数,Org类调用DCache的成员函数)
1.如果DCache类和Log类互相#include头文件,生成Org类的.o文件的时后,会提示DCache.h中的DCache类是未定义的。(DCache.h和Log.h都有#progma once)
2.如果我在DCache.h中#include “Log.h”,而Log.h中向前声明Class DCache。则会出现invalid use of incomplete type错误和 class forward declaration错误
现在的做法就是把耦合的代码复制出来两份,切断Log对DCache的依赖。但是维护两份代码的工作量还是不小的。有没有什么方法实现互相#include的啊。毕竟第一个例子是成功地。
------解决思路----------------------
抱歉,今天才有空上论坛。 这不是C++ 11的。