1

C++ クラスでこの問題が発生しています。myBarオブジェクトへのポインタを取得して に格納したいと思いますquxBar。理由は を使って値を確認できるようにしたいのですquxBar->getX()が、誤って Qux から変更してしまわないようにしたいので を使ってみBar const*ました。

class Bar
{
private:
    int x;
public:
    void setX(int X) { x = X; };
    int getX(){ return x };
}

class Foo
{
private:
    Bar *myBar;
public: 
    Bar const* getPointerToBar(){ return myBar; };            
}

class Qux
{
    void myMethod();
    Bar const* quxBar;
    Foo *mainFoo;    
}

void Qux::myMethod()
{
    quxBar = mainFoo->getPointerToBar();
    std::cout << quxBar->getX();
    quxBar->setX(100);  // HERE!!!
    std::cout << quxBar->getX(); // returns 100
}

残念ながらquxBar->setX(100)、コンパイルエラーなしで実行できるため、機能しません。

おそらく私のアプローチは完全に間違っていますが、現在の「スキル」を使用しています:)修正方法がわかりません。

ヘルプと提案をお寄せいただきありがとうございます。

4

1 に答える 1

7

これはあなたの実際のコードではないと思います.1つ目は構文エラーのため、2つ目は実際に正しい(ほとんど)ためです. 具体的には、このコードでquxBar->setX(100);はコンパイル エラーが発生します。

ただし、quxBar->getX()コンパイル エラーも発生します。const オブジェクトで呼び出すことができるコンパイラに通知する必要があります。これを行うconstには、関数シグネチャの最後に次のように追加します。

int getX() const { return x; }

おそらく、実際のコードでは;Bar* const quxBarの代わりに持っていました。Bar const* quxBar前者は Bar へのconst ポインターであり、後者はconst Barへのポインターです。例えば。前のケースでは、ポインター自体は変更できませんが、ポインターが指すオブジェクトは変更できます。

于 2010-10-12T11:13:07.340 に答える