【问题标题】:Create/Initialize new object using variables使用变量创建/初始化新对象
【发布时间】:2012-05-14 15:16:15
【问题描述】:

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

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

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

我正在阅读包含的文件

 addpeer 1
 addpeer 100
 addpeer 28

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

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

有什么方法可以做到吗?

【问题讨论】:

  • 您是否尝试使用动态名称创建变量?如果是这样,这是不可能的,变量被赋予一个仅在编译期间使用的静态名称。也许您需要一个关联容器(例如map)来将名称与对象关联起来? std::map&lt;std::string, Node&gt; 之类的东西?

标签: c++ object initialization


【解决方案1】:

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

【讨论】:

  • 我打算在添加对等点时自动创建一个新对象。所以实际上简单地说,'NewObjectPeer'实际上每次我添加新对等时都会发生变化。它是一个字符串,'addPeerNum' 每次都会改变。
  • @Andres 和 Als 一起讨论这个问题。这没有任何意义。
  • @Andres:您的对象包含的是另一回事,问题是您的对象是如何命名的。这些对象不能有相同的名称。
  • @Als,我的变量“pNo”将是唯一的,并且会一直在变化。因此,我的变量“NewPeerObject”的最终组合字符串最终总是不同
  • @Andres:您是否尝试在运行时创建变量名?你不能那样做。
【解决方案2】:

我认为您正在寻找的是一种动态调整大小的对象数组。 您可以使用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,但只能在编译时使用,如果可能,您应该避免使用它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-05
    • 1970-01-01
    • 1970-01-01
    • 2013-05-15
    • 2013-07-04
    • 2013-06-27
    • 2019-08-28
    相关资源
    最近更新 更多