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

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

Susan Sarandon
Susan Sarandon原创
2024-12-19 14:13:10801浏览

Why Do I Get an

对 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中文网其他相关文章!

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