Undefined reference to static constexpr char[]

Ich will eine static const char array in meiner Klasse. GCC beschwert und sagte mir, ich sollte verwenden constexpr, obwohl jetzt ist es mir zu sagen, es ist eine Undefinierte Referenz. Wenn ich den array nicht-Mitglied dann kompiliert. Was ist Los?

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

//.cpp
void foo::bar() {
  std::string str(baz); //undefined reference to baz
}
Nur eine Ahnung, funktioniert es, wenn baz int zum Beispiel? Können Sie dann darauf zugreifen? Es könnte auch ein bug.
Frage: Die übersetzungseinheit wird es definiert werden? Antwort: Alles, was den Kopf. Problem: Gegen die " one definition rule. Ausnahme: Compile-time-Konstante Integrale können "initialisiert" im Kopf.
Kompiliert er fein wie ein int @MooingDuck Es funktioniert gut als nicht-Mitglied. Wäre das nicht gegen die Regel verstoßen zu werden?
ints cheat. Als nicht-Mitglied, das sollte nicht erlaubt werden, es sei denn, die Regeln geändert für C++11 (möglich)
Angesichts der views und upvotes, diese Frage Bedarf einer ausführlicheren Antwort, die ich unten Hinzugefügt.

InformationsquelleAutor Pubby | 2011-11-04

Schreibe einen Kommentar