0

変数を使用して新しいオブジェクトを初期化または作成するつもりです。エラーは、宣言が競合していることを示しています。

       //instantiate new node object***********************
        string peer = "peer";
        string pNo = convertInt(addPeerNum); //convert peer number to string to concatenate 2 strings
        string NewPeerObject = peer+pNo; << ERROR POINTS TO HERE
        nodes NewPeerObject; << ERROR POINTS TO HERE

エラーメッセージ:

競合する宣言 'nodes NewPeerObject' <-- エラーの最後の行 'NewPeerObject' には以前の宣言が 'string NewPeerObject' として含まれています <-- 最後の 2 行目

私の主なポイントは、ピアを追加するときに新しいオブジェクトを作成することです。ピア 1 を追加すると、新しいオブジェクト「peer1」が作成されます。ピア 2 を追加すると、「peer2」などになります。

を含むファイルを読み込んでいます

 addpeer 1
 addpeer 100
 addpeer 28

私のプログラムでは、ファイルを読み取り、その数を「addPeerNum」という変数に格納します。これを行うと、実際には「NewPeerObject」の異なる文字列コンテンツになります。

したがって、この例では、実際に 3 つの新しいオブジェクトを作成しようとしています。

私がそれを行うことができる方法はありますか?

4

2 に答える 2

3

そのような同じ名前のオブジェクトを2つ持つことはできません。これは単一定義規則に違反しており、当然コンパイラは文句を言います。
どうぞよろしくお願いし、どちらかの名前を変更してください。

于 2012-05-14T15:17:42.213 に答える
0

あなたが探しているのは、一種の動的にサイズ変更されたオブジェクトの配列だと思います。を使用std::listして、そのような動作を実現できます。

std::list<PeerObject> list;
PeerObject peer(peer_string);
list.insert(peer);

または、std::mapピア文字列をキーとして使用する場合

std::map<std::string, PeerObject> peer_map;
PeerObject peer(peer_string);
peer_map.insert(peer_string, peer);
//    .... add more
PeerObject& foundObj = peer_map[a_key];
foundObj.doSomething();

MACRO を使用して実行することもできますが、コンパイル時のみであり、可能であれば回避する必要があります。

于 2012-05-14T15:33:28.393 に答える