- ベストアンサー
const の使い方
お世話になります。 VC5.0からVC2005.NETにソフトの移植をしているのですが、 その際、const の使い方で混乱しております。 環境:WinXP、VC2005.NET 以下のコードをビルドするとコンパイルエラーが出てしまいます。 ネットで検索しても、混乱中の上自分のケースに当てはまっているのか どうかさえも怪しい状態でして・・・ --コード-- #include "stdafx.h" class A { public: void func( const int*& a ); }; void A::func( const int*& a ) { return; } int _tmain(int argc, _TCHAR* argv[]) { int *a; A CA; CA.func( a ); ←※ここでエラー return 0; } --ここまで-- --エラー-- error C2664: 'A::func' : 1 番目の引数を 'int *' から 'const int *&' に変換できません。(新しい機能 ; ヘルプを参照) --ここまで-- 基本的なことですがご教授願います。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
訂正。 CA.func( reinterpret_cast<const int*&>(a) );
その他の回答 (3)
- sha-girl
- ベストアンサー率52% (430/816)
#2です。 CA.func( a ); ↓ CA_func( reinterpret_cast<const int*&>(a) ); でどうですか?
- sha-girl
- ベストアンサー率52% (430/816)
int *a;→const int *a; でコンパイルエラーはなくなるでしょう。 厳密な型チェックを行うコンパイラでは const int*とint*は別の型ですから エラーになります。 無理やりconstをはずすキャストをして、コンパイルを通す事も できるかもしれませんが、それだと constを使う意味がありません。(破綻しています。)
- SAYKA
- ベストアンサー率34% (944/2776)
constについて調べたら良いのでは? http://www.google.com/search?q=c%2B%2B%20const&hl=ja&lr= 通常はキャストして逃れるんじゃないかな http://www.google.com/search?q=c%2B%2B%20%E5%9E%8B%E3%82%AD%E3%83%A3%E3%82%B9%E3%83%88&hl=ja&lr= 関数側でconstなのに呼ぶ方は普通のintなんだから、エラーになるのは仕方ないよね。
補足
すみません、一部コード間違ってました。 main()ですが、 int _tmain(int argc, _TCHAR* argv[]) { const char *a; ←※ここが「const char」でした A CA; CA.func( (int*&)a ); return 0; } なので、const、ポインタ、参照が組み合わさった時に どうすればよいのか・・・
お礼
ありがとうございます。