このプログラムはC++で書かれています。私はvoid関数を使用して整数長さと次の接続された行へのポインタで構成されるLine構造体を拡張しようとしています。構造体内の行ポインタに行参照を割り当てるためのvoid Expand関数があります。新しい行は、現在の行の2倍の大きさでなければなりません。私が使用しているコードでは、「一時的なアドレスを取る」というg ++のエラーが出ます。誰も関数がライン参照nextLineにライン参照の有効なインスタンスを追加する方法を提案することができますか?C++ポインタへの参照を割り当てる際の一時エラーのアドレスを取る
struct Line
{
int length;
Line* nextLine;
};
Line NewLine(Line& lineRef)
{
Line newLine;
newLine.length = lineRef.length * 2;
return newLine;
}
void Expand(Line& lineRef)
{
//Error here states: Taking address of temporary [-fpermissive]
lineRef.nextLine = &NewLine(lineRef);
}
int main() {
Line line;
Expand(line);
cout << line.length << endl;
cout << line.nextLine->length << endl;
return 0;
}
お願いします...しないでください!これは動作しません。このおもちゃのサンプルでは動作するように見えますが、 'Line'をコピーすると、' nextLine'ポインタがコピーされ、ポインタが指し示すコンテンツはコピーされないので、ひどくクラッシュし、ランタイムは 'delete'同じポインタを2回繰り返します。 –
何が問題なのですか? – sank
はい、コピーコンストラクタと代入演算子はディープコピーを作成するか、プライベートにする必要があります。 – sank