0

メンバー関数定義のコードに問題があります。

.hファイルから:

//This is a private type
struct node {
node   *next;
node   *prev;
T      *o;
}; 

.cppファイルからエラーを生成するコード:

template <typename T>
void Dlist<T>::function(T *o)
{
node newV = new node;
....
}

これは構造体を宣言するための適切な構文であると思い、「ノードはこのスコープで宣言されていません」というエラーが発生しました。

それから私は試しました:

Dlist<T>::node *victim;

「newVはこのスコープで宣言されていません」というエラーが発生しました。これは、行自体が宣言であるため、さらに戸惑いました。

.hファイル内に.cppを含めています。

どんな助けでも大歓迎です。

4

1 に答える 1

2

new Xへのポインターを返すため、呼び出しの結果をではなくXに割り当てる必要があります。new nodenode*node

template <typename T>
void Dlist<T>::function(T *o)
{
  node* newV = new node;
....
}

ここで例を参照してください。

動的に割り当てられたオブジェクトへの生ポインタの使用は非常にトリッキーであり、メモリ管理エラーが発生することに注意してください。スマート ポインターまたは自動的に割り当てられた変数 (非ポインター)を使用することをお勧めします。

struct node {
  std::unique_ptr<node>   next;
  std::unique_ptr<node>   prev;
  std::unique_ptr<T>      o;
}; 
于 2012-12-09T09:56:28.993 に答える