对 Static constexpr char[]
的未定义引用在 C 中,在类中声明 static const char 数组并在类中使用它时成员函数时,可能会遇到指示未定义引用的错误。此错误是由于静态成员中的声明和定义分离而产生的。
问题
考虑以下示例:
// header file (foo.hpp) struct Foo { void bar(); static constexpr char baz[] = "qux"; }; // cpp file (foo.cpp) void Foo::bar() { std::string str(baz); // undefined reference to baz }
在此例如,静态 const char 数组 baz 在类中声明但未定义。使用 GCC 编译代码会出现错误“undefined reference to baz”。
解决方案
要解决此问题,您需要提供 static 的定义cpp 文件中的成员。该定义指定了数组的实际内容。在上面的示例中,将以下行添加到 cpp 文件中:
constexpr char Foo::baz[];
Explanation
在 C 中,静态成员需要声明和定义,这是独立的实体。声明指定成员的类型和名称,而定义提供其实际实现或值。
对于在类中声明的静态成员,声明通常与任何初始值设定项一起出现在类定义中。但是,该定义必须在类定义之外提供,通常在单独的 cpp 文件中或在类定义的末尾。
通过为静态成员 baz 提供定义,链接器将能够解析其引用并生成必要的代码。如果没有定义,链接器无法确定数组的实际内容,并会导致未定义的引用错误。
以上是为什么在 C 类中使用静态 constexpr char 数组时出现'未定义引用”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!