Noob在这里提问。我有一个循环依赖的类,所以我转发声明它。现在,我打算尝试用这个模板。
//在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()'。这可以修复吗?如果是这样,怎么样?
答案 0 :(得分:3)
将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)
}