相关疑难解决方法(0)

未定义的对静态constexpr char []的引用

我想static const char在班上有一个数组.海湾合作委员会抱怨并告诉我应该使用constexpr,虽然现在它告诉我这是一个未定义的参考.如果我使数组成为非成员,那么它将编译.到底是怎么回事?

// .hpp
struct foo {
  void bar();
  static constexpr char baz[] = "quz";
};

// .cpp
void foo::bar() {
  std::string str(baz); // undefined reference to baz
}
Run Code Online (Sandbox Code Playgroud)

c++ static-members constexpr c++11

168
推荐指数
5
解决办法
4万
查看次数

gcc和clang中constexpr静态成员变量的链接器错误

我有一个片段:

enum class EC {a, b};

struct B {
    constexpr B(EC ec): ec_(ec) {}
    EC ec_;
};

struct A_base {
    constexpr A_base(B b): b_(b) { }
    B b_;
};

struct A: A_base {
    static constexpr B bbb = EC::a;
    constexpr A(B bbbb): A_base(bbbb) { }
};

int main()
{
    A a1(A::bbb);    // 1
    A a2{A::bbb};    // 2

    A a3 = A::bbb;   // 3
    A a4 = {A::bbb}; // 4
}
Run Code Online (Sandbox Code Playgroud)

它通过支持c ++ 17的现代编译器编译好.使用c ++ 11和c ++ 14标准支持链接器发生错误.这个问题已在Linker错误(未定义的引用)中讨论过`static …

c++ c++11 c++14

4
推荐指数
1
解决办法
1068
查看次数

标签 统计

c++ ×2

c++11 ×2

c++14 ×1

constexpr ×1

static-members ×1