2012-05-14 6 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 노드'- 2 마지막 줄

- 오류 'NewPeerObject'의 마지막 줄에 '문자열 NewPeerObject'<로 이전 선언이있다

내 주요 요점은 피어를 더 추가 할 때 새 개체를 만드는 것입니다. I 1는 addpeer 경우, 새로운 객체 'peer1'I 2는 addpeer 경우 , 그것은 것을 만듭니다 'peer2'등

나는에서

addpeer 1 
addpeer 100 
addpeer 28 

가 포함 된 파일에 읽고있다

내 프로그램에서 파일을 읽고 'addPeerNum'이라는 변수에이 번호를 저장합니다. 이 작업을 수행 할 때 실제로 'NewPeerObject'라는 다른 문자열 콘텐츠가 있습니다.

그래서이 경우 실제로 3 개의 새 개체를 만들려고합니다.

내가 할 수있는 방법이 있습니까?

+0

동적 이름을 사용하여 변수를 만들려고하십니까? 그렇다면 이것은 불가능합니다. 변수는 컴파일하는 동안에 만 사용되는 정적 이름이 부여됩니다. 아마도 당신이 필요로하는 것은 객체와 이름을 연관시키기위한 연관 컨테이너 (예 :'map')일까요? '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 : 개체에 포함 된 내용이 다른 이야기입니다. 문제는 개체의 이름이 * 여기에 지정되어있는 방식입니다. 개체에 동일한 이름을 사용할 수 없습니다. –

관련 문제