0

私は奇妙な問題に遭遇しました。そのサブクラスの別のインスタンスと交換するサブクラスへのポインターを返す関数を作成しようとすると、「エラー C2106: '=' : 左オペランドは左辺値でなければなりません」というエラーが発生します。

問題は次のone->getMe() = two;行にあります。

class subClass{};

class someClass{

public:

subClass * pointer;

someClass(){
    pointer = new subClass;
}

subClass * getMe(){
    return pointer;
}

};

int main(){

someClass * one = new someClass;
subClass * two = new subClass;

one->getMe() = two; 
}

私はC ++に少し慣れていないので、問題はひどく単純かもしれません。どんな助けでも大歓迎です。

4

2 に答える 2

5

関数から返されるポインターは、オブジェクト内のポインターのコピーです。これは一時的なものであり、割り当てることはできません。代入できたとしても、オブジェクト内のポインターに接続されていないため、役に立ちません。関数からオブジェクトを返した後、オブジェクトのポインターに代入できるようにする場合は、参照によってポインターを返します。

subClass *& getMe() {
    return pointer;
}

また、const オブジェクトで作業するために const オーバーロードを追加することを検討する必要がある場合もあります。次のようになります。

subclass * const & getme() const {
    return pointer;
}
于 2013-08-23T00:21:42.303 に答える
1

この線

one->getMe() = two;

2 のポインターを 1 に割り当てようとしています->getMe()。ただし、 one->getMe() は、割り当てることができない一時的なコピーを返します。参照によってポインターを返し、それを変更できるようにする場合は、署名を使用できます

subClass *& getMe();

他の人が示唆したように。

そうは言っても、クラスの内部の仕組みをすべての人が見たり変更したりできるように公開しています。特に、ヒープ上のオブジェクトへのポインターは正しく割り当て解除される場合とされない場合がありますが、これは賢明ではありません。

于 2013-08-23T00:26:21.643 に答える