我遇到了一些无法编译的模板代码,但我不确定我是否理解其中的原因。该问题似乎与使用具有外联方法定义的内部类有关。下面是一个简单的例子:
template<typename T>
class Outer {
public:
struct Inner {
T a;
Inner(T _a) : a(_a) {}
};
int foo(T a);
};
template<typename T>
Inner Outer<T>::foo(T a) { //Line 43
Inner ret(a);
return ret;
}
int main(int argc, char *argv[]) {
Outer<int> out;
return 0;
}
g++ 4.2.1 失败并出现错误:error: expected constructor, destructor, or type conversion before ‘Outer’
引用上面标记的第43行。当我移动 foo
的定义时,代码工作正常内联。
我也尝试替换 Inner
与 Outer<T>::Inner
在第 43 行,但这并没有什么不同。
有什么想法吗?
最佳答案
你有两个问题。首先,您声明它返回一个 int
。 .但其次,你需要 typename Outer<T>::Inner
如果你想访问外部范围之外的内部类型。
关于c++ - 内部类的模板编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8391402/