模板类的 VS 编译器错误
Posted
技术标签:
【中文标题】模板类的 VS 编译器错误【英文标题】:VS compiler errors for template classes 【发布时间】:2017-04-27 14:35:28 【问题描述】:VS 为这段代码抛出了奇怪的编译器错误,在第 9 行给了我 3 个错误。 我之前在其他项目中使用过类似的代码,并且运行良好。 Node 类包含在标头中,并且在构造函数中将两个指针都设置为 nullptr。
template<class T>
class Edge
public:
Edge<T> *next;
Node<T> *destination;
Edge<T>();
~Edge();
;
error C2143: syntax error: missing ';' before '<'
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
error C2238: unexpected token(s) preceding ';'
我假设最后 2 个错误与第一个错误有某种关联,所以我猜有一个小的语法问题会导致所有 3 个问题。 就像我说的,我之前做过类似的事情,没有任何问题,所以这让我很困惑。
【问题讨论】:
【参考方案1】:你声明了 Node 吗?编译器需要在 Edge 之前知道节点。
这个compiles:
#include <iostream>
using namespace std;
// Use a forward-declaration of Node, so that the compiler knows this type exists.
template<class T> class Node;
template<class T>
class Edge
public:
Edge<T> *next;
Node<T> *destination;
Edge<T>();
~Edge();
;
int main()
Edge<int> test;
std::cout<<&test<<std::endl;
return 0;
成功时间:0 内存:15240 信号:0
0x7ffd75720b70
【讨论】:
以上是关于模板类的 VS 编译器错误的主要内容,如果未能解决你的问题,请参考以下文章