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

リンクされたリストはクラスステートメントで宣言されています

それに対する解決策はありますか?ありがとう

4

2 に答える 2

1
    cout<<&user<<endl;

これは、オブジェクトのアドレスではなく、オブジェクトへのポインターのアドレスを出力します。このポインターは、プログラムの特定の実行に対して常にスタック上の同じ場所にあるため、同じアドレスが生成されます。

于 2011-10-29T16:37:52.270 に答える
0

何かありますか?

std::list<myobjecttype*> lst;
for (..). 
{
   myobjecttype* a = new myobjecttype;
   lst.push_back(a);
}
于 2011-10-29T15:22:33.533 に答える