-3
class a
{
    const std::string * ptr;
    void setPtr(const std::string & text)
    {
       ptr = &text; //it's wrong, I can set something to the pointer only at definition
    }
}

解決策は何ですか?オブジェクトへのポインターは const でなければなりません (クラス a のオブジェクトはそれを変更してはなりません) が、実行時にポインター (ポインターが指すもの) を変更する必要があります。

4

2 に答える 2

2

現在のコードでそれを行うことができます。この行

const std::string * ptr;

ptrへのポインタconst std::stringです。ptrそれ自体は一定ではないため、それが指すものを変更できます。

この動作デモを見る

于 2013-01-27T18:52:29.130 に答える
1

constサンプルでa を中断したかのいずれかです。

void setPtr(const std::string & text) const

setPtrまたは、何かconstを呼び出しています。

const a* foo = something;
foo->setPtr(somestring);

基本的に次の 3 つのルールがあります。

メンバー関数を使用して非 constaインスタンスを変更することはできません。ポインターまたはそれへの参照を介して 非 constインスタンスを変更することはできません。インスタンス を変更することはできません。const
aconst
const a

于 2013-01-27T21:01:51.627 に答える