c++ - 内部类的模板编译错误

标签 c++ templates

我遇到了一些无法编译的模板代码,但我不确定我是否理解其中的原因。该问题似乎与使用具有外联方法定义的内部类有关。下面是一个简单的例子:

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 的定义时,代码工作正常内联。

我也尝试替换 InnerOuter<T>::Inner在第 43 行,但这并没有什么不同。

有什么想法吗?

最佳答案

你有两个问题。首先,您声明它返回一个 int。 .但其次,你需要 typename Outer<T>::Inner如果你想访问外部范围之外的内部类型。

关于c++ - 内部类的模板编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8391402/

相关文章:

c++ - 为什么我的 map 打印全为零?

c++ - 使用具有生成器类型的 C++ 模板函数

c++ - 在模板的帮助下避免函数重载

c++ - 为什么在条件评估中最后进行后缀增量?

c++ - 错误修复。 OpenGL、GLSL Sprite 网格渲染问题

c++ - 在其一侧显示 glutSolidCone

c++ - 使用 Boost Graph Library 和 Bellman-Ford 算法

c++ - 涉及模板的未知错误

c++ - 编译器何时可以推断模板参数?

php - 为通过 Apache 托管的网站创建一个简单的模板