C++ コンパイル エラー「タイプ 'type' の式からのタイプ 'type&' の参照の初期化が無効です」を解決する方法は?

王林
リリース: 2023-08-25 23:43:45
オリジナル
3191 人が閲覧しました

解决C++编译错误:\'invalid initialization of reference of type \'type&\' from expression of type \'type\'\',如何解决?

C コンパイル エラーの解決策:「型 'type' の式からの型 'type&' の参照の初期化が無効です。解決方法は?」

問題の背景:
C プログラミングでは、コンパイル エラーが発生することがあります。その 1 つは、「型 'type' の式からの型 'type&' の参照の初期化が無効です」というエラー メッセージです。つまり、参照型のデータを初期化するときに型の不一致が発生します。

このエラーの原因は、変更できない一時オブジェクトまたはリテラルを非 const 参照変数に初期化しようとしたことです。 C の参照型の性質により、参照されるオブジェクトが定数存在する必要があります。

解決策:

  1. 参照変数を正しく初期化する
    このエラーを解決するには、参照変数を初期化するときに、参照されるオブジェクトが変更可能な左辺値であることを確認する必要があります。左辺値は、名前によって値にアクセスして変更できる永続オブジェクトです。コード例を次に示します。
int main() {
    int value = 10;
    int& ref = value; // 正确示例:将一个可修改的lvalue赋给引用变量
    return 0;
}
ログイン後にコピー
  1. 参照変数をリテラル値に初期化しないようにする
    リテラル値を非 const 参照変数に初期化しようとすると、コンパイラによって次のエラーが発生します。上記のエラーメッセージ。リテラルは一時オブジェクトであるため、その値を名前で変更することはできません。エラーの原因となるコードの例を次に示します。
int main() {
    int& ref = 10; // 错误示例:试图将字面值初始化为非常量引用变量
    return 0;
}
ログイン後にコピー

正しいアプローチは、定数が存在する変数にリテラル値を保存し、それを参照変数に割り当てることです。コード例は次のとおりです。

int main() {
    int value = 10;
    const int& ref = value; // 正确示例:将一个具有恒定存在性的变量的值赋给引用变量
    return 0;
}
ログイン後にコピー
  1. 定数を非定数参照変数に代入しないでください
    定数を非定数参照変数に代入しようとすると、同様のエラーが発生します。 。定数は不変であるため、変数を参照してその値を変更することはできません。エラーを引き起こすコードの例を次に示します。
int main() {
    const int value = 10;
    int& ref = value; // 错误示例:试图将常量赋给非常量引用变量
    return 0;
}
ログイン後にコピー

正しいアプローチは、定数が存在する非定数変数に定数を代入し、それを定数参照変数に代入することです。コード例は次のとおりです。

int main() {
    const int value = 10;
    const int& ref = value; // 正确示例:将一个常量赋给常量引用变量
    return 0;
}
ログイン後にコピー

結論:
C プログラミングで、「型 'type' の式からの型 'type&' の参照の初期化が無効です」というコンパイル エラーが発生した場合、次のことが必要です。参照に注意する 型の性質上、参照されるオブジェクトが変更可能な左辺値であることが必要です。一時オブジェクトやリテラル値を非 const 参照変数に割り当てることは避け、定数オブジェクトを処理する場合は可能な場合は const 参照を使用します。参照変数を適切に初期化することで、このコンパイル エラーを解決できました。

以上がC++ コンパイル エラー「タイプ 'type' の式からのタイプ 'type&' の参照の初期化が無効です」を解決する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート