class B;
class A{
B *b;
public:
void operator= (B *b){
this->b = b;
}
};
B *b = new B()
A *a = new A();
a = b;
「変換できません」というエラーが表示B*されます。A*これを回避する方法はありますか?
さて、方法があり、私が次のようなものを使用する場合:
a = NULL;
どの演算子「=」が使用されますか?
class B;
class A{
B *b;
public:
void operator= (B *b){
this->b = b;
}
};
B *b = new B()
A *a = new A();
a = b;
「変換できません」というエラーが表示B*されます。A*これを回避する方法はありますか?
さて、方法があり、私が次のようなものを使用する場合:
a = NULL;
どの演算子「=」が使用されますか?
オブジェクトの代わりにポインタを割り当てました。最後の命令を次のように置き換えるだけです。
*a = b;
2番目の質問に答えるには:NULLは、コンパイラーで複数の方法で定義できます(最新の標準では、積分0またはリテラルとしてnullptr)。ポインターを他のタイプのポインターにキャストすることもできますが、またはvoid*をとるオーバーロードされた関数にaを渡すと、コンパイラーは呼び出されている関数を解決できなくなる可能性があります。int*long*
ただし、NULLを避けたい場合は、operator(B& b)代わりに単に作成してください。参照は必ずオブジェクトを指しています。
からへの割り当てoperator=を提供します。あなたのコードは(エラーメッセージが示すように)からへの変換を提供しません。そのため、はポインタであり、ではないため、指定した代入演算子は使用しません。コードでは、のように、からへの割り当てが可能です。B*AB*A*a=NULLaAB*AA a= new B();
ポインタの代わりに実際のオブジェクトを使用する場合は*、コードからすべてを削除してください。
class B{};
class A{
B b;
public:
void operator= (const B& b){ //pass non-primitives by const reference
this->b = b;
}
};
B b;
A a;
a = b;
ポインタを使用したい場合、aB*をに割り当てる唯一の「便利な」方法A*は、Bオブジェクトが。から派生した場合Aです。それはあなたがしていることではないように見えるので、にを割り当てることB*はA*あなたのコードでは意味がありません。
に割り当てるステートメントを次のように変更します。
*a = b;