1

まず最初に、私は決してプログラマーではなく、宿題のためにこれを行っているだけであることをお知らせしておく必要があります。そのため、可能であれば、本当に詳細な説明が必要になります :)

現在、ポイントの座標を格納するために使用する Node クラスがあります。それに加えて、私がやりたいことは、カウンターに基づいて、それぞれの異なる Node オブジェクトにインデックス番号を割り当てることです。インターネットから収集したものから、これを行う方法は、コンストラクターでカウンターを初期化する別のクラスを使用することであり、Node クラス内で静的パラメーターとして追加するだけです。

これは上記の私のコードです:

class counter
{
  public:
    int nr;
    counter()
    {
        nr = 0;
    }
};

class Nod   
{  
  static counter ctr;

  public:   
     int index;      
     Punct pct;
     Nod(Punct &temp)
     {  
         pct = temp;    
         index = ctr.nr ++ ;
     }
     Nod() {}   
}; 

これで問題なくビルドできますが、メイン関数内で Nod オブジェクトを宣言しようとするとすぐに次のエラーが発生します。以前、独自のデストラクタを作成しようとしたときにこのエラーが発生しましたが、そのコードを削除するだけで回避できました。

ありがとうございます。私が言及したことのいくつかに間違った用語を使用していたら申し訳ありません。

4

4 に答える 4

2

私もそれにハマったことがありました。それから、Scott Meyers の記事を読みました。彼は、クラスの静的変数ではなく、関数の静的変数を推奨しました。これは、変数の宣言と定義をすべて 1 か所で行うことを意味します。次の印刷物:

0 1 2 3 4 5 6 7 8 9

#include <iostream>

int next_index(void)
{
  static int index = 0;
  return index++;
}

int main(void)
{
  for (int i = 0; i < 10; ++i) {
    std::cout << next_index() << ' ';
  }
}

あなたの場合、次のようにします。

Nod(Punct &temp)
 {  
     pct = temp;    
     index = next_index();
 }
于 2012-12-04T15:49:02.787 に答える
2

静的データ メンバーはクラスで宣言されますが、正確に 1 つの翻訳単位 (= .cpp ファイル)で定義する必要があります。以下を 1 つの .cpp ファイル (できれば Nod.cpp) に入れます。

counter Nod::ctr;

intところで、カスタム class の代わりにan を使用することもできましたcounter

于 2012-12-04T15:29:00.183 に答える
0

問題の説明から、解決策ははるかに簡単です。

あなたは単純な問題を複雑にしました、ただ使用してください

class Nod   
{  
static int ctr;

public: 
 int index;      
   Nod()
 {  
     ctr++;  //Increment the counter every time a object is created
 }
 Nod() {}   
}; 


//Allocate memory also

int Nod::ctr;

コンストラクターのタイプが複数ある場合は、すべてのコンストラクターにカウンターインクリメントを追加します。

于 2012-12-04T15:32:49.550 に答える
0

問題は、宣言されNod::ctrているだけで定義されていないことです。

class Nod
{
    // Declare the counter variable
    static counter ctr;

    ...
};

// Define the counter variable
counter Nod::ctr;

もちろん、定義はヘッダー ファイルではなくソース ファイルにある必要があります。そうしないと、代わりに複数の定義エラーが発生します。

于 2012-12-04T15:28:24.147 に答える