1
void Foo::Bar(Baz& x)
{
z = &x;
}

Foo* foo;

foo -> Bar(nullptr);

typedef だけを使用して、汎用テンプレート Baz を作成しようとしています。z は非公開で Foo に属しているため、nullptr を z に割り当てるのに問題があります。

可能であれば、実装をあまり変更せずに z を nullptr に設定する最善の方法が必要です-これがそれほど悪い実装でない限り。

もしかしてと思ってた

(Baz *) 0、または *(void * )0 または Nullable Class 。

4

4 に答える 4

2

nullptr を取得する場合はFoo::Bar、パラメーターをポインター型に変更する必要があります。

void Foo::Bar(Baz* x)
{
   z = x;
}

Foo* foo = new Foo(); 

foo -> Bar(nullptr);

注: 使用する前にオブジェクトを割り当てる必要がありますfoo pointer。それ以外の場合、動作は未定義です。

于 2014-03-11T09:24:14.443 に答える
1

nullptrはポインターであり、有効な参照ではありません:

int &v = nullptr;

gcc は不平を言います:

bla.cpp:1:10: error: invalid initialization of non-const reference of type ‘int&’ from an rvalue of type ‘std::nullptr_t’
 int &v = nullptr;

したがって、参照引数として渡すことはできません。渡すことができるようにしたい場合はx、(おそらく const) ポインターに変更します。

void Foo::Bar(Baz* const x) {
   z = x;
}
于 2014-03-11T09:25:50.123 に答える