Ich würde das gerne machen:
template <typename T>
struct S
{
...
static double something_relevant = 1.5;
};
aber ich kann nicht, da something_relevant
es nicht vom integralen Typ ist. Es hängt nicht davon ab T
, aber vorhandener Code hängt davon ab, dass er ein statisches Mitglied von ist S
.
Da S eine Vorlage ist, kann ich die Definition nicht in eine kompilierte Datei einfügen. Wie löse ich dieses Problem?
std::string
TypAntworten:
Definieren Sie es einfach in der Kopfzeile:
Da es wie bei allen Vorlagen Teil einer Vorlage ist, stellt der Compiler sicher, dass es nur einmal definiert ist.
quelle
<goes_playing>
Wow, wenn ich über Ihren Namen schwebe, sehe ich Ihren Vertreter! Das wusste ich auch nicht. @Prasoon: Nein, du hast recht, ich bin iterativ dort angekommen, wo es jetzt ist. (Deshalb habe ich Ihre AntwortSeit C ++ 17 können Sie das statische Element als deklarieren
inline
, wodurch die Variable in der Klassendefinition definiert wird:live: https://godbolt.org/g/bgSw1u
quelle
Das wird funktionieren
quelle
template<typename T> double S<T>::something_relevant=1.5;)
Something_relevant" nicht definiert (ich habe den Fehler beim Auslösen des Compilers entfernt. Können Sie mir bitte sagen, was der Grund ist?