菜鸟问题在这里。我有一个循环依赖类,所以我转发声明它。现在,我打算用这个尝试一个模板。
//在C.h中
class C {
public:
virtual void getMap();
}
//在 A.h 中
class C;
class A {
public:
virtual void foo(C *c);
template <class T>
void changeProperty(C *c, string& s) {
void* obj = c->getMap()->at(s); // does not compile
// (did not include the rest for brevity)
}
}
这无法在指定的行编译,说明 C 类没有函数“getMap()”。这可以修复吗?如果是,怎么办?
最佳答案
将 changeProperty
的定义移出类(因此它不是 inline
)并将其放置在 class C
定义之后的某处被看见了。
所以预处理后的结果最终会是这样的:
class C;
class A {
public:
virtual void foo(C *c);
template <class T>
void changeProperty(C *c, string& s);
}
// ...
class C {
public:
virtual void getMap();
}
// ...
template <class T>
void A::changeProperty(C *c, string& s)
{
void* obj = c->getMap()->at(s); // compiles
// (did not include the rest for brevity)
}
关于c++ - 具有前向声明类的模板函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16670193/