首页 >后端开发 >C++ >为什么在类方法中使用静态 constexpr char 数组时出现'未定义引用”错误?

为什么在类方法中使用静态 constexpr char 数组时出现'未定义引用”错误?

Barbara Streisand
Barbara Streisand原创
2024-12-23 08:41:17745浏览

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
}

解决方案:

要解决此问题,您必须在实现文件中为静态成员提供单独的定义(.cpp) 除了类定义 (.hpp) 中的声明:

// implementation file (.cpp)
constexpr char foo::baz[]; // Definition

说明:

编译器同时需要声明和定义静态成员的名称以了解其内存位置及其初始值。类定义中的声明仅指定成员的类型和名称,而定义则提供实际的内存分配和初始化。通过将定义与声明分开,您可以确保编译器拥有在编译期间将成员链接到其定义的所有必要信息。

以上是为什么在类方法中使用静态 constexpr char 数组时出现'未定义引用”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn