使用变量创建/初始化新对象

时间:2012-05-14 15:16:15

标签: c++ object initialization

我打算使用变量初始化或创建一个新对象。 错误说我声明冲突。

       //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

错误讯息:

  

冲突声明'节点NewPeerObject'&lt; - 最后一行错误       'NewPeerObject'的先前声明为'string NewPeerObject'&lt; - 2nd last line

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

我正在阅读包含

的文件
 addpeer 1
 addpeer 100
 addpeer 28

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

所以在这个例子中,我实际上是在尝试创建3个新对象。

我有什么方法可以做到吗?

2 个答案:

答案 0 :(得分:3)

你不能拥有两个同名的对象。它违反了 One definition Rule ,编译器自然会抱怨 请你自己帮个忙,改变其中任何一个的名字。

答案 1 :(得分: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进行操作,但仅限于编译时,如果可能,您应该避免使用它们。