关于g++在处理相互依赖的类时的有关问题

关于g++在处理相互依赖的类时的问题
小弟在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的啊。毕竟第一个例子是成功地。

------解决思路----------------------
引用:
Quote: 引用:

可以再加一个模板参数
#include <iostream>
using namespace std;

class A
{
public:

template <class T>
void memberA(){ cout << "MA" << endl; }

template <class T>
static void StaticA(){ cout << "SA" << endl; }

template <class T, class U>
void call()
       {
U u;
u.template memberB<T>();
U::template StaticB<T>();
}
};


class B
{
public:
template <class T>
void memberB(){ cout << "MB" << endl; }

template <class T>
static void StaticB(){ cout << "SB" << endl; }

template <class T, class U>
void call()
{
U u;
                u.template memberA<T>();
U::template StaticA<T>();
}
};

int main()
{
A a;
B b;
a.call<int,B>();
b.call<int,A>();
}
这位大神,U::template是什么用法啊,小弟从来没见过。是c++11新特性吗?能不能给我详细讲讲你这个例子的含义啊。我看你是把所有代码写到一个文件里的,我想要代码是分开在不同的文件中的情况下的解决方法。


抱歉,今天才有空上论坛。 这不是C++ 11的。 
关于g++在处理相互依赖的类时的有关问题