我有1個模板類拆分跨2個文件,即時嘗試去工作,但似乎無法找出解決這個錯誤:錯誤C2143:語法錯誤:缺少';' '<'之前。模板類拋出錯誤C2143:語法錯誤:缺少';'之前'<'
的TreeNode.h文件如下
#ifndef TREENODE_H
#define TREENODE_H
#include <iostream>
#include <vector>
#include <utility>
using namespace std;
template <typename T>
class TreeNode {
public:
TreeNode();
~TreeNode();
void addChild(TreeNode<T> *newNode);
void addKey(T& newKey);
void setIsLeaf(bool value);
bool isLeaf() { return leaf; }
private:
vector<TreeNode<T>*> children;
vector<T> keys;
bool leaf;
};
#include "TreeNode.tem"
#endif
這裏是「TreeNode.tem」文件:
#include <iostream>
#include <utility>
using namespace std;
template<typename T>
TreeNode<T>::TreeNode()
{
leaf = true;
}
template<typename T>
TreeNode<T>::~TreeNode()
{
for (int i = 0; i < children.size(); i++)
{
delete children[i];
}
}
template<typename T>
void TreeNode<T>::addChild(TreeNode<T> *newNode)
{
children.push_back(newNode);
}
template<typename T>
void TreeNode<T>::addKey(T& newKey)
{
keys.push_back(newKey);
}
template<typename T>
void TreeNode<T>::setIsLeaf(bool value)
{
leaf = value;
}
我錯誤的位置是在樹節點的第一行構造函數實現。
我做了一些事先的閱讀,大多數問過這個錯誤的人已經結束了只是有拼寫錯誤,我不能在我的代碼中找到像這樣的東西。 關於如何解決這個問題的任何想法將是偉大的, 在此先感謝, 請問。
編輯:
一些回去後而來回DanielFrey我們已經發現了這個錯誤的原因。創建TreeNode.tem文件時,我使用內置的Visual Studio文件創建器(簡單地「添加文件」)來創建一個空白的* .cpp文件,然後我將其重命名爲適合我的目的。爲了解決這個問題,我創建了一個空白* .h文件(顯然存在元數據差異),然後將其重命名爲TreeNode.tem並適當填充。這足以解決其他人面臨同樣問題的問題。
適用於gcc和clang。 – Adam
夫婦無關的評論:從TreeNode.tem中刪除前三行。他們是重複的。另外,將其稱爲TreeNode.cpp。 – Adam
@亞當沒有!這是[不會作爲一個單獨的編譯單元,它是一個模板](http://stackoverflow.com/questions/495021)! –