클래스 메서드 내에서 정적 constexpr 문자 배열에 액세스하려고 하면 "정의되지 않은 참조" 오류가 발생할 수 있습니다. 이 문제는 클래스 정의 내에서 배열 선언 및 초기화가 발생하지만 정의 자체가 생략된 경우에 발생합니다.
문제:
// header file (.hpp) struct foo { void bar(); static constexpr char baz[] = "quz"; // Declaration and initialization }; // implementation file (.cpp) void foo::bar() { std::string str(baz); // "undefined reference to baz" error }
해결 방법:
이 문제를 해결하려면 정적 멤버에 대해 별도의 정의를 제공해야 합니다. 클래스 정의(.hpp)의 선언 외에 구현 파일(.cpp):
// implementation file (.cpp) constexpr char foo::baz[]; // Definition
설명:
컴파일러에는 선언과 선언이 모두 필요합니다. 메모리 위치와 초기 값을 알기 위해 정적 멤버의 정의. 클래스 정의의 선언은 멤버의 유형과 이름만 지정하는 반면, 정의는 실제 메모리 할당 및 초기화를 제공합니다. 선언과 정의를 분리하면 컴파일 중에 멤버를 해당 정의에 연결하는 데 필요한 모든 정보가 컴파일러에 포함됩니다.
위 내용은 클래스 메서드에서 정적 constexpr char 배열을 사용할 때 '정의되지 않은 참조' 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!