2013-10-12 2 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; 
} 

I место ошибки в первой строке TreeNode реализация конструктора.

Я сделал некоторое предварительное чтение, и большинство людей, которые спросили об этой ошибке, уже закончились тем, что у вас были орфографические ошибки, и я не могу найти что-либо подобное в своем коде. Любые идеи о том, как я мог исправить это, было бы замечательно, Заранее спасибо, Воля.

EDIT:

После некоторого назад и вперед с DanielFrey мы обнаружили причину этой ошибки. При создании файла TreeNode.tem я использовал встроенный создатель файла Visual Studio (просто «добавьте файл»), чтобы сделать пустой * .cpp-файл, который затем переименовал в соответствии с моей целью. Чтобы исправить это, я вместо этого создал пустой файл * .h (как, очевидно, существуют различия в метаданных), который затем был переименован в TreeNode.tem и занесен соответствующим образом. Этого было достаточно, чтобы решить проблему для других, имеющих ту же проблему.

+0

работает с gcc и clang. – Adam

+0

Пара несвязанных комментариев: Удалите первые три строки из TreeNode.tem. Они дубликаты. Также назовите это TreeNode.cpp. – Adam

+0

@Adam NO !!! Это [не будет работать как отдельный блок компиляции, это шаблон] (http://stackoverflow.com/questions/495021)! –

ответ

1

Код, который вы показали в порядке, это не проблема сама по себе. Единственное, что я могу себе представить, что приведет к этой проблеме, - это то, что вы (или ваша система сборки) пытались самостоятельно скомпилировать TreeNode.tem. Это не может работать, и это не обязательно.

Убедитесь, что вы запустить тест, имея это в отдельном файле:

#include "TreeNode.h" 

int main() 
{} 

и посмотреть, если он компилирует.

+0

Я сделал это, и он компилируется как с gcc, так и с clang. – Adam

+0

@Adam Что вы пытаетесь мне сказать? ОР должен сделать это, чтобы проверить свою собственную среду и понять возможную причину своей проблемы. –

+0

Я просто пробовал (используя VS2010 в данный момент) и все еще имею те же ошибки. Может быть, я испортил свой файл, структурируя некоторые, как на этом пути, я попытаюсь воссоздать проблему, изолируя ее. –

Смежные вопросы