2012-05-14 4 views
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 

Ошибка:

конфликтующие декларация 'узлы NewPeerObject' < - последняя строка ошибки 'NewPeerObject' имеет предыдущее заявление как 'строка' NewPeerObject < - вторая последняя строка

Моей главной целью является создание нового объекта, когда я добавляю больше сверстников. Если я addpeer 1, то будет создан новый объект «peer1» Если я addpeer 2, это будет «peer2» и т.д.

Читаю в файле, который содержит

addpeer 1 
addpeer 100 
addpeer 28 

В моих программа, она читает файл и сохраняет номер в переменной с именем «addPeerNum» , и со мной это делает, у него на самом деле есть другое строковое содержимое «NewPeerObject».

Итак, в этом случае я фактически пытаюсь создать 3 новых объекта.

Есть ли способ, которым я смогу это сделать?

+0

Вы пытаетесь создать переменные с динамическими именами? Если это так, это невозможно, переменной присваивается статическое имя, которое используется только во время компиляции. Возможно, вам нужен ассоциативный контейнер (например, «карта»), чтобы связать имя с объектом? Что-то вроде 'std :: map '? –

ответ

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(); 

Вы также можете сделать это с макросами, но только во время компиляции, и вы должны избегать их, если это возможно.

3

У вас не может быть двух объектов с таким же именем. Он нарушает One definition Rule, естественно, компилятор жалуется.
Просто сделайте себе одолжение и измените имя любого из них.

+0

Я собираюсь создать новый объект автоматически, когда я добавляю одноранговый узел. поэтому на самом деле просто сказать: «NewObjectPeer» на самом деле меняется каждый раз, когда я добавляю новый одноранговый узел. это строка и «addPeerNum» каждый раз. – Andres

+0

@ Andres С Als на этом. Это не имеет никакого смысла. –

+0

@Andres: То, что содержит ваш объект, - это другая история, проблема в том, как ваши объекты * с именем * здесь. Вы не можете иметь одинаковые имена для этих объектов. –

Смежные вопросы