尝试在类方法中访问静态 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中文网其他相关文章!