• ベストアンサー

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 *&' に変換できません。(新しい機能 ; ヘルプを参照) --ここまで-- 基本的なことですがご教授願います。

質問者が選んだベストアンサー

  • ベストアンサー
  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.4

訂正。 CA.func( reinterpret_cast<const int*&>(a) );

happy10429
質問者

お礼

ありがとうございます。

その他の回答 (3)

  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.3

#2です。 CA.func( a ); ↓ CA_func( reinterpret_cast<const int*&>(a) ); でどうですか?

  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.2

int *a;→const int *a; でコンパイルエラーはなくなるでしょう。 厳密な型チェックを行うコンパイラでは const int*とint*は別の型ですから エラーになります。 無理やりconstをはずすキャストをして、コンパイルを通す事も できるかもしれませんが、それだと constを使う意味がありません。(破綻しています。)

  • SAYKA
  • ベストアンサー率34% (944/2776)
回答No.1

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なんだから、エラーになるのは仕方ないよね。

happy10429
質問者

補足

すみません、一部コード間違ってました。 main()ですが、 int _tmain(int argc, _TCHAR* argv[]) { const char *a; ←※ここが「const char」でした A CA; CA.func( (int*&)a ); return 0; } なので、const、ポインタ、参照が組み合わさった時に どうすればよいのか・・・

関連するQ&A

専門家に質問してみよう