>백엔드 개발 >C++ >클래스 메서드에서 정적 constexpr char 배열을 사용할 때 '정의되지 않은 참조' 오류가 발생하는 이유는 무엇입니까?

클래스 메서드에서 정적 constexpr char 배열을 사용할 때 '정의되지 않은 참조' 오류가 발생하는 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-23 08:41:17744검색

Why Do I Get an

정적 constexpr char[]에 대한 정의되지 않은 참조

클래스 메서드 내에서 정적 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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