3

作業を開始しようとしている 2 つのファイルに分割された 1 つのテンプレート化されたクラスがありますが、このエラーの解決策を見つけられないようです: エラー 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;
}

エラーの場所は、TreeNode コンストラクター実装の最初の行にあります。

私は事前にいくつかの読書をしましたが、このエラーについて尋ねたほとんどの人はすでにスペルミスをしているだけで、私のコードではこのようなものを見つけることができません. これをどのように修正できるかについてのアイデアは素晴らしいでしょう、前もって感謝します、ウィル。

編集:

DanielFrey とやり取りした後、このエラーの原因を発見しました。TreeNode.tem ファイルを作成するとき、組み込みの Visual Studio ファイル クリエーター (単純に「ファイルを追加」) を使用して空の *.cpp ファイルを作成し、目的に合わせて名前を変更しました。これを修正するために、代わりに空の *.h ファイルを作成し (明らかにメタデータに違いがあるため)、名前を TreeNode.tem に変更し、適切に入力しました。これは、同じ問題を抱えている他の人の問題を解決するのに十分でした.

4

1 に答える 1

1

あなたが示したコードは問題ありません。それ自体は問題ではありません。この問題につながると私が想像できる唯一のことは、あなた (またはあなたのビルド システム) がTreeNode.tem単独でコンパイルしようとしたことです。それはうまくいかず、とにかく必要ありません。

これを別のファイルに入れて、必ずテストを実行してください。

#include "TreeNode.h"

int main()
{}

コンパイルされるかどうかを確認します。

于 2013-10-12T07:30:13.420 に答える