undefinierter Verweis auf `WindowsTimer::_frequency’
Ich habe auch versucht, es zu ändern
LARGE_INTEGER _frequency.QuadPart = 0ull;
oder
static LARGE_INTEGER _frequency.QuadPart = 0ull;
aber ich bekomme immer noch Fehler.
weiß jemand warum?
mögliches Duplikat einer undefinierten Referenz für statisches Mitglied, Linkerfehler
– iammilind
2. Februar 2012 um 10:15 Uhr
Wo (wenn überhaupt) haben Sie definiertWindowsTimer::_frequency?
– CB Bailey
2. Februar 2012 um 10:16 Uhr
@CharlesBailey Es ist mein einziges Mitglied in der Klasse.
– kakusch
2. Februar 2012 um 10:35 Uhr
Sie müssen definieren _frequency in der .cpp-Datei.
dh
LARGE_INTEGER WindowsTimer::_frequency;
Warum sollte ich das tun?
– nowox
8. Oktober 2020 um 21:29 Uhr
@nowox Weil C++ nicht C# ist … ist ein statisches Datenelement im Grunde eine globale Variable, die sich zufällig im Namensraum ihrer Klasse befindet. Das Erklärung innerhalb der Klassendefinition ist wie ein extern Erklärung einer globalen Variablen: Sie gibt ihre Existenz, ihren Namen und ihren Typ bekannt, erzeugt aber nicht das Objekt (denn dann hätten Sie in jeder Datei ein Objekt, das den Header mit der Klassendefinition enthält, das Gegenteil von dem, was gewünscht ist). Stattdessen gibt es genau ein Definition dieses Objekts in einer der cpp-Dateien, und der Linker löst Code auf, der diesen Namen für dieses Objekt verwendet.
– Peter – Setzen Sie Monica wieder ein
22. März 2021 um 12:10 Uhr
@nowox Der Grund, warum Sie vor C ++ 17 eine separate Objektdefinition benötigten, hängt mit dem veralteten Build-Paradigma von C ++ zusammen: Es verwendet die Idee der 1970er Jahre von “Übersetzungseinheiten” (Dateien nach der Peverarbeitung), die separat in Objektdateien mit Sparse kompiliert werden Informationen (z. B. keine Typinformationen etc.). Die Verknüpfungsphase ist sprachunabhängig (z. B. weiß nichts über C++) und getrennt von der Kompilierungsphase. (Forts.)
– Peter – Setzen Sie Monica wieder ein
22. März 2021 um 12:18 Uhr
(Forts.) Umgebungen wie Java oder C# hingegen erzeugen “semantisch angereicherte” Kompilierungsartefakte (Klassen, Pakete), typischerweise aus mehreren Quelldateien auf einmal: Kompilierung und Verknüpfung sind nicht klar getrennt, was eine bessere Interaktion zwischen Code in verschiedenen Dateien ermöglicht .
– Peter – Setzen Sie Monica wieder ein
22. März 2021 um 12:23 Uhr
Mit C++17 können Sie Ihre Variable deklarieren im Einklanges muss nicht mehr in einer cpp-Datei definiert werden.
inline static LARGE_INTEGER _frequency;
Wyktor
Linker weiß nicht, wo er Daten zuweisen soll _frequency und Sie müssen es manuell sagen. Sie können dies erreichen, indem Sie einfach diese Zeile hinzufügen: LARGE_INTEGER WindowsTimer::_frequency = 0; in eine Ihrer C++-Quellen.
Genauere Erklärung hier
Wenn innerhalb der Klasse eine statische Variable deklariert ist, sollten Sie sie wie folgt in der cpp-Datei definieren
LARGE_INTEGER WindowsTimer::_frequency = 0;
Dies ist ein vollständiges Codebeispiel für diese andere Frage, die tatsächlich ein Duplikat dieser Frage ist.
#include <iostream>
#include <vector>
using namespace std;
class Car
{
public:
static int b; // DECLARATION of a static member
static char* x1(int x)
{
b = x; // The static member is used "not as a constant value"
// (it is said ODR used): definition required
return (char*)"done";
}
};
int Car::b; // DEFINITION of the static
int main()
{
char* ret = Car::x1(42);
for (int x = 0; x < 4; x++)
{
cout << ret[x] << endl;
}
return 0;
}
Danke für deine Antwort. Können Sie bitte einen Link teilen, wo ich mehr über statische Elementfunktionen (wichtig) und statische Variablen lesen kann (ich habe das oft gesehen). Das enthält weitere Details und Beispiele für statische Funktionen und statischen Konstruktor für eine Klasse vortäuschen
– Benutzer786
30. Juni 2021 um 14:01 Uhr
Danke für deine Antwort. Können Sie bitte einen Link teilen, wo ich mehr über statische Elementfunktionen (wichtig) und statische Variablen lesen kann (ich habe das oft gesehen). Das enthält weitere Details und Beispiele für statische Funktionen und statischen Konstruktor für eine Klasse vortäuschen
– Benutzer786
30. Juni 2021 um 14:01 Uhr
10136200cookie-checkUndefinierter Verweis auf einen statischen Memberyes
mögliches Duplikat einer undefinierten Referenz für statisches Mitglied, Linkerfehler
– iammilind
2. Februar 2012 um 10:15 Uhr
Wo (wenn überhaupt) haben Sie definiert
WindowsTimer::_frequency
?– CB Bailey
2. Februar 2012 um 10:16 Uhr
@CharlesBailey Es ist mein einziges Mitglied in der Klasse.
– kakusch
2. Februar 2012 um 10:35 Uhr