- 締切済み
constとポインタと引数について
質問なのですが、 class cParameter { private: A_parameter* parameter; // 構造体A_parameter public: void SetParameter( const A_parameter* temp_parameter){ parameter = temp_parameter; } } この場合 >>parameter = temp_parameter; でエラーを表示されて IntelliSense: 型 "const A_parameter*" の値を型 "A_parameter*" のエンティティに割り当てることはできません ビルドすると error C2440: '=' : 'const A_parameter*' から 'A_parameter*' に変換できません。 と言われます。 引数の形を const A_parameter* temp_parameter ではなく A_parameter* const temp_parameter だと大丈夫なのですが、これだと引数の値を変更できるので私の願望とは違う事になってしまいます。 何か解決策はないのでしょうか。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- Tacosan
- ベストアンサー率23% (3656/15482)
- akinomyoga
- ベストアンサー率85% (100/117)
- notnot
- ベストアンサー率47% (4857/10273)
関連するQ&A
- const参照をポインタ引数として渡すには?
Aというクラスがあって、BはAを継承しているとします。 そこで、Bのconst参照を返却する以下の関数定義があったとします。 const B& getB() { return b; //bはB型 } さらに次の関数があります。 void C(A* a) { //適当な処理 } ここでCを以下のように呼ぼうとするとコンパイルエラーになります。 C(getB()); Cは引数として型Aを求めていますが、BはAを継承しているので、 そのまま渡しても問題ないと思います。 次に、Cは引数としてポインタを求めているのにgetBの戻り値の参照をそのまま 渡しているからまずいのだと思い、以下のようにしました。 const B& hoge = getB(); C(*hoge); //参照をポインタに変換 しかし、さらに型が違うとエラーになります。 どこがまずいのでしょうか? それと、上では参照をポインタに変換するために変数hogeを宣言していますが、 それを省略して一気にやる方法はないでしょうか? C(*getB()); のようなやり方がしたいのですが。
- ベストアンサー
- C・C++・C#
- 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 *&' に変換できません。(新しい機能 ; ヘルプを参照) --ここまで-- 基本的なことですがご教授願います。
- ベストアンサー
- C・C++・C#
- メンバ関数にconstをつけた際の問題
C++を勉強中の学生です。 以下のようなコードで問題が起こりました。 class TEST{ private: int mArray[10]; //(int a;) public: int* get_mArray(void) const; //(int get_a(void) const;) }; int* TEST::get_mArray(void) const{ return mArray; //配列の先頭要素の値を受け取りたい。 } //(関係のありそうな部分のみを抜き出しました) このコードにおいて、関数は値を変えない事が明白なので、constをつける必要性はないのですが(癖でつけた際に発生した問題です)、 なぜconstをつけると動作しなくなるのか知りたいです。 //()で囲った部分を有効にし、 int TEST::get_a(void) const{return a;}という関数はエラーにならなかったのですが、どのような違いがあるのでしょうか? 出たエラーは(visual C++ 2010) 'const int [10]' から 'int *' に変換できません。 というものでした。 ポインタとconst関連の部分を手持ちの本で勉強しなおしたのですが、解答を得られなかったのでこちらで質問させてもらいます。
- ベストアンサー
- C・C++・C#
- C++のクラスの可変引数化を禁止する方法。
C++のクラスの可変引数化を禁止する方法。 クラスのインスタンスをprintfの引数にするのをコンパイル・エラーにする方法はないでしょうか? コピーコンストラクタや代入のオーバーロードをprivateにしてもエラーが出ないので方法を探しています。 #include "stdafx.h" class CTest { private: int intdata; public: CTest() : intdata(0) { }; private: void operator =(const CTest& src) {} CTest(const CTest& src) {} }; int _tmain(int argc, _TCHAR* argv[]) { CTest ctest; printf( "%s %p\n", ctest, ctest ); return 0; }
- ベストアンサー
- C・C++・C#
- ヘッダーファイル内でconst変数を初期化する時にエラー
ヘッダーファイル内でconst変数を初期化する場合、 以下のようにしているのですが、エラーが出てしまいます。 どのようにすればうまくいくのでしょうか? 環境はVisualC++.NETです。 class abc{ private: const int x; public: abc(){ x = 10; } }
- ベストアンサー
- C・C++・C#
- 参照型の変数をポインタ引数を持つ関数に引数を書く方法
C++の参照を使って以下のソースを試したのですが、 memmoveの引数のところでエラーが出ます。 memmoveの引数はポインタ型で合いません。 実体コピーしたい場合、どのようにすればよいのでしょうか? const AA &aとすれば、a自体が関数内で書き換わる心配がないので、 C++の参照型は、ポインタより安全と理解しているのですが その認識は間違っていないでしょうか? struct aa{ int x; int y; }AA; void test(AA &a) { AA b; memmove(b, a, sizeof(AA)); } void main(){ AA c; test(c); }
- ベストアンサー
- C・C++・C#
- VC++でconst void*に渡す
Sqlite3.dllの sqlite3_bind_text16に値を渡したいのですが、 3つ目の引数がconst void*となっているのでtextBox1->Textを渡したいので 適当にいろいろやったのですがよくわかりません。 sqlite3_bind_text16(&stmt,1,,-1,0); 他の引数は一応上のとおりです。
- ベストアンサー
- C・C++・C#
- C#で引数を渡して、スレッド用の関数をよびだすには?
C#でスレッドを使う場合、引数が渡せません。 具体的には、 Thread temp=new Thread(new ThreadStart(message)); temp.Start(); private void message(){ ~} と、なり、ThreadStart(message)の部分で、 ThreadStart(message(mystr))とし、 private void message(string s){} 書くことができないのです。 しかし、関数に、引数を渡せないのは、不便です。 何か、方法は、ないでしょうか。
- ベストアンサー
- その他(プログラミング・開発)
- 「テンプレート」について
C++でテンプレートについて調べています。 しかし、参考書や参考サイトを見ても下記の例のような、簡易な処理しか載っていないので、 実際にはどのような使われ方をしているのかわかりません。 例1)引数の大小を比較して、小さい方を返す。 template <class T> inline const T& btMin(const T& a, const T& b) { return b < a ? b : a; } 例2)引数の値を入れ替える処理 template <class T> inline void swap(T& a, T& b) { T temp = a; a = b; b = temp; } そこで、参考書や参考サイトなどでは載っていないような、 思いもよらない使われ方をしているものはご存じありませんか? できれば、使われているオープンソースの場所を教えて頂けると嬉しいです。 皆さんどうかよろしくお願い致します。
- 締切済み
- C・C++・C#
- 可変引数をconstで参照渡し
以下のようなクラスをconstの参照渡しでうけとる、可変引数を持つ関数を作りたいのですが、以下のようにしてもうまくいきません。 何か良い方法はないものでしょうか? template<class TT> class vector3{ public: enum{NUM=3}; TT x[NUM]; void Sum(const int num,...); }; template<class TT> void vector3<TT>::Sum(const int num,const ...){ int i,j; va_list list; va_start(list,num); for(i=0;i<NUM;i++){ x[i]=va_arg(list,&vector3<TT>).x[i]; } for(j=1;j<num;j++){ for(i=0;i<NUM;i++){ x[i]+=va_arg(list,&vector3<TT>).x[i]; } } va_end(list); }
- ベストアンサー
- C・C++・C#