模板类的 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 编译器错误的主要内容,如果未能解决你的问题,请参考以下文章

为啥这个私有模板函数会编译? -> 编译器错误 VS 2009

VS 2012 模板错误

模板类的编译错误

VS编译出错:未能找到类型,未能加载基类

VS编译出错:未能找到类型,未能加载基类

各种坑