0

だから今私は次のものを持っています:

        boost::ptr_vector <Customer> cvect;

         ifstream cDbase("datafiles/customers.txt");

        while (cDbase.good())
        {
            while (!cDbase.eof())
            {
                cDbase >> newCust;

                Customer* c = &newCust;
                cvect.push_back(c);

            }
        }


        for (unsigned int loop = 0; loop < cvect.size(); loop++)
            {   
                cout << cvect[loop];
            }

顧客の詳細を印刷しようとすると、空白行が印刷されます。ptr_vector を適切に逆参照するにはどうすればよいですか?

4

2 に答える 2

2

Boost ポインタ コンテナは、動的に割り当てられたオブジェクトを所有するコンテナ用です。したがって、意図したとおりに使用するには、次のようにします。

while (cDbase >> newCust) {
  cvect.push_back(new Customer(newCust));
}

(注:でループしないでくださいeof())。

しかし、それらを動的に保存する必要は本当にあるのでしょうか? 単純にこれはどうですか:

std::vector<Customer> cvect;

ifstream cDbase("datafiles/customers.txt");

while (cDbase >> newCust) {
  cvect.push_back(newCust);
}
于 2013-10-22T08:39:18.990 に答える
0

がローカル変数の場合newCust、ローカル変数へのポインターをベクターにプッシュしますが、これは機能しません。

代わりに、ループのたびに新しいオブジェクトを作成する必要があります。簡単な解決策は次のようになります。

while (cDbase >> newCust)
    cvect.push_back(new Customer(newCust));

これには、適切なコピーコンストラクターが必要になる場合があります。

于 2013-10-22T08:39:27.530 に答える