同じ行で複数のオブジェクト ポインターを宣言すると、開発者は多くの場合、次のような問題につながる可能性のある共通の問題に遭遇します。コンパイラエラー。コードを正しく実行するには、この問題の根本原因を理解することが重要です。
次のクラス宣言を考えてみましょう:
<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 サイトの他の関連記事を参照してください。