0

コードを短くしようと思います。

テンプレートを使用してバイナリ検索ツリー (略して BST) を作成しよとしいます。

add 関数でエラーが発生しましたが、何らかの形でテンプレートを誤用していると確信しています

テンプレートのため、このコードはすべて .h (ヘッダー) ファイルにあります。

編集: const タイプと間違いは、私がいじったためでした。実際には、コンパイルしたコードではなく、スタック オーバーフローに関する以前の質問からのものでした。

template <typename Type>
class BSTNode {   // Binary Search Tree nodes
  private:
    int key;      // we search by key, no matter what type of data we have
    Type data;
    BSTNode *left;
    BSTNode *right;

  public:
    BSTNode (int, Type);     // key, data
    bool add (int, Type);
};

追加機能:

template <typename Type>
bool BSTNode<Type>::add(int newKey, Type newData) {
  if (newKey < this->key) {
    if (left == NULL) {
      this->left = new BSTNode<Type>(int newKey, Type newData);
    }
  } else {
    this->right = new BSTNode<Type>(int newKey, Type newData);
  }
  return false;
}

ここでエラーが発生します:

this->left = new BSTNode<Type>(int newKey, Type newData);

int の前に期待される一次式

4

3 に答える 3

2

特にテンプレートを誤用しているわけではありませんが、パラメーターを誤用しています!

this->left = new BSTNode<Type>(int newKey, Type newData); 

もっと似ているはずです

this->left = new BSTNode<Type>(newKey, newData); 
于 2012-06-13T09:55:57.367 に答える
1

エラーはかなり明確です:

 bool add (int, Type);

vs

 bool add(int newKey, const Type &newData)

クラス定義の宣言を次のように変更する必要があります。

 bool add (int, const Type&);

ステートメントからタイプを削除します。

 this->right = new BSTNode<Type>(int newKey, Type newData);
 this->right = new BSTNode<Type>(int newKey, Type newData);

する必要があります

 this->right = new BSTNode<Type>(newKey, newData);
 this->right = new BSTNode<Type>(newKey, newData);
于 2012-06-13T09:56:12.490 に答える
1

this->left = new BSTNode<Type>(newKey, newData);タイプなしである必要があります。

于 2012-06-13T09:55:33.580 に答える