>백엔드 개발 >C++ >한 줄에 여러 개체 포인터를 선언하면 C에서 컴파일러 오류가 발생하는 이유는 무엇입니까?

한 줄에 여러 개체 포인터를 선언하면 C에서 컴파일러 오류가 발생하는 이유는 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-10-27 11:29:29942검색

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

한 줄에 여러 개체 포인터 선언: 컴파일러 오류 해결

같은 줄에 여러 개체 포인터를 선언할 때 개발자는 종종 다음과 같은 일반적인 문제에 직면하게 됩니다. 컴파일러 오류. 올바른 코드 실행을 보장하려면 이 문제의 근본 원인을 이해하는 것이 중요합니다.

다음 클래스 선언을 고려하세요.

<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>

이 경우 각 포인터를 별도로 선언하면 올바른 기능이 보장됩니다. 그러나 선언을 한 줄로 압축하려고 하면:

<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에서 컴파일러 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.