Int* から Int への C++ の無効な変換

Junaid Abdullah Mansoor 2023年10月12日
  1. C++ でのポインターの準備
  2. 変換エラー
  3. 変換エラーを解決する
Int* から Int への C++ の無効な変換

この短いチュートリアルでは、int* から int への無効な対話というエラー メッセージについて説明します。 まず、C++ でのポインターの要約を見てみましょう。

C++ でのポインターの準備

ポインターは、変数のアドレス (16 進値) を保持するために使用され、変数名の前にアドレス演算子としても知られるアンパサンド記号 (&) を使用して、ポインター型変数に割り当てられます。

ポインターは、次のように * 記号を使用して宣言されます。

DataType *p;

次のステートメントを使用して、整数変数のアドレスを整数ポインターに割り当てることができます。

int* p = &a;

上記のコード行は、整数変数 a のアドレスを整数ポインター p に割り当てます。

変換エラー

整数変数に、整数型の値ではなく variable の 16 進数のアドレス値が割り当てられると、int* から int への変換が無効ですというエラーが発生します。

コード例:

#include <iostream>
using namespace std;

int main() {
  int a = 10;
  int p;
  p = &a;  // invalid conversion error
  cout << p;
}

上記のコードは、整数変数に格納できない型 int* のアドレスが p に割り当てられているため、行 07 で変換エラーを生成します。

出力:

main.cpp: In function 'int main()': main.cpp:7:7: error: invalid conversion from 'int*' to 'int' [-fpermissive] ptr = &p; //invalid conversion. ^

変換エラーを解決する

ほとんどのコンパイラは、ポインター型から単純なデータ型への型キャストを許可していません。 したがって、アドレス型の値が適切なポインター変数に割り当てられていることを確認することで、この問題を解決できます。

コード例:

#include <iostream>
using namespace std;

int main() {
  int a = 10;
  int* p;
  p = &a;
  cout << p;
}

実行コード

p を宣言する際の * 記号は、整数へのポインターになります。 これにより、型変換を必要とせずに整数変数のアドレスを格納できるようになります。

関連記事 - C++ Error