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

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

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-27 11:29:29931ブラウズ

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

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

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

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

<code class="cpp">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;</code>

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

<code class="cpp">private:
    sf::Sprite* re_sprite_hair, re_sprite_body, re_sprite_eyes;</code>

コンパイラーはエラーを発生させます:

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 に適用されるものとして誤って解釈され、ポインターではなくオブジェクトが作成されます。

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

<code class="cpp">sf::Sprite *re_sprite_hair, *re_sprite_body, *re_sprite_eyes;</code>

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

以上がC で複数のオブジェクト ポインターを 1 行で宣言するとコンパイラ エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。