У меня есть 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 и занесен соответствующим образом. Этого было достаточно, чтобы решить проблему для других, имеющих ту же проблему.
работает с gcc и clang. – Adam
Пара несвязанных комментариев: Удалите первые три строки из TreeNode.tem. Они дубликаты. Также назовите это TreeNode.cpp. – Adam
@Adam NO !!! Это [не будет работать как отдельный блок компиляции, это шаблон] (http://stackoverflow.com/questions/495021)! –