質問なのですが、
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
だと大丈夫なのですが、これだと引数の値を変更できるので私の願望とは違う事になってしまいます。
何か解決策はないのでしょうか。
よろしくお願いします。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
最終的に何をしたいのかによりますが。
> A_parameter* const temp_parameter
> だと大丈夫なのですが、これだと引数の値を変更できるので私の願望とは違う事になってしまいます。
↑の宣言の仕方だと、厳密に書くと「引数の値自体は変更できなくて、引数の "指し示す先の構造体" が変更できる」という事になるので、書き間違えていらっしゃるか何か勘違いしていらっしゃるのだと思いますが…。(No1 の方は引数のポインタの値を書き換えないのが "願望" であると解釈されたようですね。) 私は、質問者さんの願望は、以下の (b) だと最初思ったのですが。
(a) 受け取ったポインタ引数の値を変更したくない (しかし、ポインタの引数の指し示す先の構造体は変更しても良い) というのであれば、回答 No1 の方の言う通り引数を
void SetParameter(A_parameter* const temp_parameter);
にすれば良いです。
(b) 引数の指し示す先の構造体を全く変更しないという場合は、そもそもメンバの宣言の所で
private:
const A_parameter* parameter; // 構造体A_parameter
の様にするべきです。
(c) 引数の指し示す先の構造体は変更したくないが、メンバの parameter の内容は後で書き換えたいという場合は、そもそもポインタとしてではなく、直接の構造体としてメンバ宣言するべきです。
private:
A_parameter parameter;
public:
void SetParameter(const A_parameter* temp_parameter){
this->parameter = *temp_parameter;
}
No.1
- 回答日時:
引数の値自体を変更されたくないなら、
A_parameter *const temp_parameter
ですね。temp_parameter がconstということ。
const A_parameter *temp_parameter
だと、引数のポインターの指す先が変更不可なので、ポインターの指す先が変更可能である
A_parameter *parameter
に代入できません。また、temp_parameterの直前にconstがないので引数自体は変更可能です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP phpのエラーについて 1 2022/06/27 22:30
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2022/04/01 12:11
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 6 2022/06/08 12:55
- C言語・C++・C# const char** p;のとき、free(p)でC4090エラーとなるのはなぜですか 3 2023/03/31 16:28
- C言語・C++・C# Cの関数の引数のconst *charについて 5 2023/04/25 13:05
- JavaScript WordPressのコンタクトフォーム7にて送信者の位置情報を送らせたい 2 2022/09/14 23:28
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- JavaScript セレクトを全て選択されていないと、文字によるエラーメッセージを表示させるコードを調べています 2 2023/06/22 15:48
- JavaScript useStateの分割代入について 1 2022/05/06 10:02
- C言語・C++・C# c言語 int temp = 0; if(isdigit(arr[i])){ temp=arr[i] 2 2022/03/27 01:44
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VC++6.0 MFC ダイアログバーを...
-
C言語の関数と配列に関する質問
-
fopne で失敗する原因
-
C言語のポインタに直接アドレス...
-
基本アルゴリズムの『返す』の...
-
C言語: ポインタ
-
【なぜポインタを使うのか】
-
TCHAR文字列内の検索について
-
戻り値で構造体を返すことは可...
-
【VC++2005(CLR)】マルチスレッ...
-
メモリのアドレスからの値の取...
-
ポインタ変数の利用方法
-
VB.NET DLL【API関数(コールバ...
-
VBはCを混乱させる?
-
セグメントエラー
-
LPSTR型の初期化について
-
Windowプログラミング lParam...
-
関数の引数をvoid*でキャストする
-
CopyMemory()をmemcpy()に書き...
-
任意のアドレスの中身を参照し...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
セグメントエラー
-
C言語のポインタに直接アドレス...
-
init関数の意味
-
戻り値で構造体を返すことは可...
-
fopne で失敗する原因
-
C言語の関数と配列に関する質問
-
Run-Time Check Failure #3とい...
-
LPSTR型の初期化について
-
ExcelVBAでのkernel32(64bit)
-
main(int argc,char **argv[])...
-
アプリを32bitから64bit移行
-
ハンドルはポインタか
-
連結リスト 要素の入れ替え
-
C言語でのconstを返す関数
-
Cで作成したDLL関数をVBから呼...
-
NULLとブランクの違い
-
エラーの意味
-
ハンドル、アドレス、ポインタ...
-
DLL<->VB間での受け渡し(文字...
-
【C言語】戻り値が構造体の関数
おすすめ情報