2013-10-12 90 views
2

我有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並適當填充。這足以解決其他人面臨同樣問題的問題。

+0

適用於gcc和clang。 – Adam

+0

夫婦無關的評論:從TreeNode.tem中刪除前三行。他們是重複的。另外,將其稱爲TreeNode.cpp。 – Adam

+0

@亞當沒有!這是[不會作爲一個單獨的編譯單元,它是一個模板](http://stackoverflow.com/questions/495021)! –

回答

1

您顯示的代碼是可以的,它本身不是問題。我能想象的唯一事情就是導致這個問題,那就是你(或者你的編譯系統)試圖自己編譯TreeNode.tem。這是行不通的,反正也不需要。

,確保您在一個單獨的文件中有這樣運行測試:

#include "TreeNode.h" 

int main() 
{} 

,看看它是否編譯。

+0

我做到了這一點,它確實編譯了gcc和clang。 – Adam

+0

@Adam你想告訴我什麼? OP應該這樣做來驗證他自己的環境並理解他的問題的可能原因。 –

+0

我剛剛嘗試過(現在使用VS2010),仍然有相同的錯誤。也許我搞砸了我的文件構建一些沿途,我會嘗試通過隔離它來重新創建問題。 –

相關問題