3

次のような関数プロトタイプがあります

test(something &)

そして私はやっています

something *ss = new something();

そして、私が言います

test(ss)

コンパイラは、式 something * からの型 something& の参照の初期化を言って文句を言います。

しかし、new はアドレスを返し、ss はそのアドレスを指さなければなりません! したがって、テストが参照を期待している場合、ss は参照を表していませんか?

4

3 に答える 3

3

あなたの関数は通常のsomethingオブジェクトを期待しています。ここではポインターを使用する必要はありません。

something ss;

test(ss);

関数のシグネチャが のようf(T&)になっている場合は、オブジェクトへの参照を受け入れることを意味しTます。署名が の場合、オブジェクトへのポインターf(T*)を受け入れることを意味します。T

于 2013-02-12T00:31:24.617 に答える
2

あなたの関数は への参照を期待しており、 へのポインタsomething渡しています。ポインターを逆参照する必要があります。something

test(*ss);

このようにして、関数は が指すオブジェクトへの参照を取得しますss。オブジェクトがある場合は、それを次のsomething場所に直接渡すことができます。

something sss;
test(sss); // test takes a reference to the sss object.
于 2013-02-12T00:29:41.630 に答える
0

変数の参照とアドレスに混乱しています。

関数プロトタイプが次の場合:

test(something &)

あなたはそれを呼び出すことができますsomething object

something ss;
test(ss);

あなたはそれを呼び出すことができますsomething pointer

 something *ss = new something();
 test(*ss);

関数が次の場合:

test(something *)

あなたは呼び出すことができます:

something *ss = new something();
test(ss);
于 2013-02-12T00:40:54.497 に答える