41

Cache次のように指定された関数書き込みを持つクラスがあります

bool write(const MemoryAccess &memory_access, CacheLine &cl);

この関数をこのように呼び出しています。

const Cache *this_cache;
c = (a==b)?my_cache:not_cache;
c->write(memory_access,cl);

上記の行は私に次のエラーを与えています

「'bool Cache::write(const MemoryAccess&, CacheLine&)' の 'this' 引数として 'const Cache' を渡すと、修飾子 [-fpermissive] が破棄されます。」

this 引数はコンパイラ固有であり、コードのマングリングとローカル名前空間変数の優先度の破壊に役立ちます。しかし、そのような変数はここでは渡されていません。

4

3 に答える 3

50

cは typeであるため、メンバー関数const Cache *のみを呼び出すことができます。const

次の 2 つのオプションがあります。

const(1)の宣言から削除しcます。

(2)Cache::write()次のように変更します。

 bool write(const MemoryAccess &memory_access, CacheLine &cl) const;

(最後に追加されていることに注意してくださいconst。)

于 2012-05-26T11:25:24.623 に答える
5

オブジェクトへのポインターを介してメソッドを呼び出すと、このオブジェクトは暗黙的にthisポインターとしてメソッドに渡されます。cおそらくタイプがありconst Cache*ます。methodwriteは として宣言されていないため、その本体からアクセスできるconst非 constthisポインターがあり、const修飾子のc破棄が必要です。

于 2012-05-26T11:24:56.247 に答える
0

また、クラスのメソッドが任意のメンバーにポインターを返す場合、型の例を返す前に const を書くことを忘れないでください:

const float * getPosition() const{...}

于 2015-10-29T05:45:44.707 に答える