「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > C++ で複数のオブジェクト ポインターを 1 行で宣言するとコンパイラ エラーが発生するのはなぜですか?

C++ で複数のオブジェクト ポインターを 1 行で宣言するとコンパイラ エラーが発生するのはなぜですか?

2024 年 11 月 9 日に公開
ブラウズ:399

Why Does Declaring Multiple Object Pointers on a Single Line Lead to Compiler Errors in C  ?

複数のオブジェクト ポインターを 1 行で宣言: コンパイラー エラーを解明する

複数のオブジェクト ポインターを同じ行で宣言すると、開発者は多くの場合、次のような一般的な問題に遭遇します。コンパイラエラー。コードを正しく実行するには、この問題の根本原因を理解することが重要です。

次のクラス宣言を考えてみましょう:

public:
    Entity()
    {
        re_sprite_eyes = new sf::Sprite();
        re_sprite_hair = new sf::Sprite();
        re_sprite_body = new sf::Sprite();
    }

private:
    sf::Sprite* re_sprite_hair;
    sf::Sprite* re_sprite_body;
    sf::Sprite* re_sprite_eyes;

この場合、各ポインターを個別に宣言することで、正しい機能が保証されます。ただし、宣言を 1 行に圧縮しようとすると、

private:
    sf::Sprite* re_sprite_hair, re_sprite_body, re_sprite_eyes;

コンパイラによりエラーが発生します:

error: no match for 'operator=' in '((Entity*)this)->Entity::re_sprite_eyes = (operator new(272u), (<statement>, ((sf::Sprite*)<anonymous>)))

このエラーを理解する鍵は、アスタリスク (*) 演算子の目的にあります。 C では、アスタリスクはポインターまたは逆参照操作のいずれかを示します。この例では、アスタリスクは sf::Sprite オブジェクトへのポインターを示す必要があります。ただし、上記の宣言では、アスタリスクが re_sprite_body および re_sprite_eyes に適用されるものとして誤って解釈され、ポインターではなくオブジェクトが作成されます。

この問題を解決するには、正しい構文は次のとおりです:

sf::Sprite *re_sprite_hair, *re_sprite_body, *re_sprite_eyes;

この明確化により、各ポインターが適切に宣言され、コンパイラー エラーが解決され、意図した機能が保証されます。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3