0

オブジェクトの配列であり、他のすべてのタスクを実行するために正しく機能するtArrayというオブジェクトを使用しています。オブジェクトの配列からbuyerNameを使用して文字列の配列を作成し、新しい配列を埋めてから返す必要があります。しかし、私のタイトルに記載されているようにエラーが発生し続けます、誰かが理由を知っていますか?私は今のところ私のプログラムでこの方法だけに苦労しています。ありがとう

この最初のコードチャンクは、アナライザークラスのメソッドを呼び出すために使用されます

std::string *topBuyers = analyser.topFiveBuyers();
for(int idx = 0; idx < 5; idx++)
    std::cout << "Top buyer" << (idx+1) << ": " << topBuyers[idx] << std::endl;
std::cout << std::endl;
delete [] topBuyers;

コードの次の部分は、問題のメソッドです。

string* Analyser::topFiveBuyers()
{
const int sSize = 5;

string calcString[sSize] = {tArray[0].buyerName, tArray[1].buyerName, 
tArray[2].buyerName, tArray[3].buyerName, tArray[4].buyerName}; 

return calcString;
}
4

1 に答える 1

5

から一時変数へのポインタを返していますtopFiveBuyers

vector<string>これを行う正しい方法は、の代わりにまたはarray<string,5>をメソッドから返すことstring*です。

非常に奇妙な理由で、絶対にポインタ返す必要がある場合は、new-を使用してスペースを割り当てる必要があります。呼び出し先はその後クリーンアップする必要があるため、それに伴うすべての問題があります。現在、関数スコープ内で自動ストレージを使用していますが、関数が戻った後も引き続き使用可能/アクセス可能であるとは限らないため、アクセス違反が発生します。

于 2013-03-08T20:06:24.380 に答える