【发布时间】:2015-12-07 17:46:05
【问题描述】:
以下内容无法与 VS 2015 一起编译:
template <typename T, typename U>
struct Tree {
struct Node {};
};
template <typename T>
struct Thing : public Tree<T, int> {
typename Tree<T, int>::Node* foo();
};
template <typename T>
typename Tree<T, int>::Node* Thing<T>::foo() {return nullptr;}
int main() {}
但是如果我删除Tree 的第二个模板参数,它会编译,如果我在Thing<T> 类中定义foo(),它会编译。所以这是一个VS错误对吗?如何修改上述内容以使其在 VS2015 中编译,而不在类中定义 foo()?错误消息指出“无法将函数定义与现有声明匹配”。
【问题讨论】:
-
您应该告诉我们确切的错误信息是什么。此外,它也不在这里编译:ideone.com/YZVMJp
-
The following code似乎被VS接受了
-
那我不明白。我的 Visual Studio 2015 不会完全编译上面的内容。但是,如果我在它编译的任何地方删除模板 U。
-
啊!感谢您提供这个替代方案。现在它编译了。我不知道为什么我的 VS2015 需要它,但至少现在它可以工作了。
标签: c++ templates visual-c++ visual-studio-2015