2017-07-11 10 views
-4

このように簡単です:関数がポインタ引数を変更しないように指定します。の仕方?さらにもう1つ:C++ - 'const type *'から 'type *'への無効な変換

class A { 
private: 
    int *p; 
public: 
    void foo (const int *q) { 
    p = q; 
    } 
}; 

A a; 
int b = 3; 
int *c = &b; 
a.foo(c); 

まだ助けてくれてありがとう!

+2

あなたは 'const int *'引数を受け取り、 'const '変数にそれを保存しようとしています。エラーメッセージはあなたにこれを説明しようとしていますので、もっと慎重に読むようにしてください。 – tadman

+1

はい、関数*自体は 'q 'が指しているものを変更しないと言います。しかし、それ以外の*メンバ関数がデータを変更できるように非定数ポインタに保存します。 –

+1

'A = a;'これはなんですか?細部への注意は低いです。 –

答えて

1

さて、ポインターにconstnessを追加するのではなく、とすることを明確にしました。ポインタをコピーすると安全に削除できます。エラーメッセージは、あなたがそのゴールで失敗したことを示しています。

それをするタイプがある:

int* const 

は(何もありませんしない限り、それは右に直接適用される場合には、)constが左に直接適用され、覚えておいてください。

0

あなたはconstポインタを 'foo()'に渡しています。これは、ポインタによってポーンされたデータを誰かに変更させたくないことをコンパイラに伝えていることを意味します。したがって、constポインタを非constポインタに変換することは意味をなさない。しかし、もしあなたが本当にそうしたいのであれば、 'memcpy'でこれを回避することができます。

+0

'memcpy'は奇妙なアプローチになります。 'const_cast'確実に –

関連する問題