两个模板类有两个方法,每个方法调用另一个类的方法:
// Foo.h
template<typename T>
class Foo {
public:
static void call_bar() {
Bar<int>::method();
}
static void method() {
// some code
}
};
// Bar.h
template<typename T>
class Bar {
public:
static void call_foo() {
Foo<int>::method();
}
static void method() {
// some code
}
};
我怎样才能让它发挥作用?简单地将#include "Bar.h"
添加到Foo.h(反之亦然)是行不通的,因为每个类都需要另一个类。
编辑:我也尝试了前向声明,但在链接阶段仍然失败:
// Bar.h
template <typename T>
class Foo {
public:
static void method();
};
// Foo.h
template <typename T>
class Bar {
public:
static void method();
};
答案 0 :(得分:3)
当你有两个相互依赖的类模板时,使用两个.h文件是没有意义的。为了能够使用Foo
,您需要Foo.h
和Bar.h
。为了能够使用Bar
,您还需要Foo.h
和Bar.h
。最好将它们放在一个.h文件中。
foobar.h中:
template<typename T>
class Foo {
public:
static void call_bar();
static void method() {
// some code
}
};
template<typename T>
class Bar {
public:
static void call_foo();
static void method() {
// some code
}
};
template<typename T>
void Foo<T>::call_bar() {
Bar<int>::method();
}
template<typename T>
void Bar<T>::call_foo() {
Foo<int>::method();
}