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' <-- 最后第二行

我的主要观点是当我添加更多对等点时创建一个新对象。如果我添加peer 1,它将创建一个新对象“peer1”如果我添加peer 2,它将是“peer2”等。

我正在阅读包含

 addpeer 1
 addpeer 100
 addpeer 28

在我的程序中,它读取文件并将数字存储在一个名为“addPeerNum”的变量中,而我这样做,它实际上具有不同的字符串内容“NewPeerObject”。

所以在这种情况下,我实际上是在尝试创建 3 个新对象。

有什么方法可以做到吗?

4

2 回答 2

3

您不能有两个具有相同名称的对象。它违反了One definition Rule,编译器自然会抱怨。
请帮自己一个忙并更改其中任何一个的名称。

于 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 回答