2011-10-29 5 views
0

루프를 사용하여 같은 형식의 다른 개체를 만든 다음 연결된 목록의 각 특정 개체에 대한 포인터를 저장하려고합니다. 문제는 객체가 생성 될 때마다 포인터가 동일한 메모리 주소를 반환한다는 것인데, 그리스트에서 각 객체를 구별 할 수 없다.C++ 루프주기의 개체 참조

그 해결책은 무엇입니까? 감사합니다

나는 다음과 기능이 있습니다

Data dt(10,10,2010); 
int p=0; 
ifstream fx; 
fx.open("utilizadores.txt",ifstream::in); 
if(!fx) 
{cout << "FX. nao existe!" <<endl;} 
string linha; 
string nLugar; 
int iD=1; 

while(!fx.eof()) 
{ 
    getline(fx,linha,'\n'); 
    Utilizador* user; 
    if(linha.find(',')==-1 && linha.size()>1) 
    { 
     cout<<"Entrou no vector"<<endl; 
     string nlugar(linha.substr(0, linha.size())); 
     nLugar=nlugar; 

    } 

     else 
    { 
     int inic=0; 
     int pos=linha.find(',',inic); 
     string nick(linha.substr(inic,pos-inic)); 
     pos++; 
     inic=pos; 
     pos=linha.find(',',inic); 
     string email(linha.substr(inic,pos-inic)); 
     user=new Utilizador(dt,iD,nick,email); 
     cout<<&user<<endl; 
     cout<<user->clone()<<endl; 
     } 
    fx.close(); 
    } 

링크 된 목록은 클래스 문에서 선언을

답변

3
 
cout<<&user<<endl; 

은 다음과 같아야합니다

 
cout<<user<<endl; 

& 사용자가 주소입니다 지역 변수 Utilizador *는 동일하게 유지됩니다. 사용자 변수 값 자체는 필요한 포인터이며 반복 할 때마다 달라야합니다.

2

이 줄

cout<<&user<<endl; 

인쇄 객체에 대한 포인터의 주소. user 자체는 생성하려는 객체에 대한 포인터입니다. 개체의 주소를 인쇄하려면, 당신이 그것을 할 때마다 새로운 개체 수 있습니다 있지만

cout<<user<<endl; 

를 작성하는 의미 변수 user는 같은 장소에 항상이다. user 값을 목록에 추가 할 수 있으며 실제로는 매번 다를 수 있습니다.

+0

그리고 어떻게 사용자의 가치를 추가 할 수 있습니까? 예를 들어 줄 수 있습니까? – user1019880

+0

죄송합니다. 답변을 이해하지 못했습니다. 영어가 제 모국어가 아닙니다. 값으로 전달할 수 없으며 포인터 또는 메모리 참조를 던져야합니다. – user1019880

+0

추가하지 않는 것 같습니다. 목록에 무엇이든, 아무 데나, 그래서 나는 정확하게 말할 수 없다; 하지만 "사용자"를 추가하면 실제로 잘 작동합니다. "& 사용자"를 추가하지 마십시오. –

1

"& 사용자"개체에 대한 참조를 포함하는 포인터의 반환 주소입니다.