2017-04-03 1 views
-1

In my.h Datei habe ich diese Erklärung:nicht aufgelöstes externes Symbol "public static struct"

/** 
* XMLReader Class 
* 
* Defines the required function to parse and get data from XML File 
**/ 
class XMLReader { 
public: 


    XMLReader(); 
    ~XMLReader(); 

    static BOOL XmlFinder(WCHAR* argv, const WCHAR* log,const WCHAR* Pass); 
    /** 
    * Get the data from the XML Files 
    * 
    * Returns Boolean if find it 
    */ 

static struct data 
    { 
     WCHAR NumProcess[100]; 
     WCHAR Log[100]; 
     WCHAR Pass[100]; 
     WCHAR Mail[100]; 
     WCHAR memLimit[100]; 
     WCHAR CPULimit[100]; 

    }data; 


}; 

Und in meiner CPP-Datei i definiert haben und inizialized Daten struct:

int wmain(int argc, WCHAR* argv[]) 
{ 

    struct XMLReader::data; 

    wmemcpy(XMLReader::data.Log, L"mama", 50); 
    wmemcpy(XMLReader::data.Pass, L"am0r3", 50); 
    wmemcpy(XMLReader::data.CPULimit, L"am0r3", 50); 
    wmemcpy(XMLReader::data.Mail, L"am0r3", 50); 
    wmemcpy(XMLReader::data.NumProcess, L"am0r3", 50); 
    wmemcpy(XMLReader::data.memLimit, L"am0r3", 50); 

Aber Ich habe immer noch auf VS2013 Fehler LNK2001: Fehler 3 Fehler LNK2001: unaufgelöst externes Symbol "public: statische Struktur XMLReader :: Daten XMLReader :: Daten" (? Daten @ XMLReader @@ 2U01 @ A) C: \ Benutzer \ Dokumente \ Visual Studio 2013 \ Projekte \ xmlLiteExample \ C++ \ XmlLiteReader.obj xmlliterereaderTask und

Fehler 4 Fehler LNK1120: 1 nicht aufgelöste externe C: \ Users \ Documents \ Visual Studio 2013 \ Projects \ xmlLiteExample \ C++ \ Debug \ xmllitereaderTask.exe xmllitereaderTask

Verbesserungsvorschläge?

+0

Nun, es sieht aus wie "öffentlich" und "statisch" sind beide falsch in Ihrem Code geschrieben. –

+0

Wo? vielleicht in Titel – kenhero

+0

@kenhero _unresolved externes Symbol "** punic **: ** stati ** struct XMLReader :: Daten auf .obj_ – erip

Antwort

1

Und in meiner CPP-Datei habe ich definiert und Daten struct

Sie haben nicht inizialized.

struct XMLReader::data; 

Dies ist ein Neudeklaration des Typstruct XMLReader::data;, keine Definition des statischen Klassenmitglied. Eine solche Neueinlegung hat keine Wirkung.

XMLReader::data (keine struct) ist der Name des statischen Datenelements. Sie müssen sich mit ihm definieren, sowohl die Art und den Namen und Sie nicht in einer Funktion definieren, können Sie es auf Dateiebene zu tun haben:

struct XMLReader::data XMLReader::data; 

Es wird empfohlen, nicht data als Namen zu verwenden, für ein Variablen- und ein Struktur-Tag. In der Tat ist es nicht empfehlenswert, data als einen Namen für irgendetwas zu verwenden. Es enthält keine Informationen. Und natürlich verwenden Sie nichts als Name für ein Struktur-Tag und eine Variable. Dies ist verwirrend und nur für die Kompatibilität mit einer obskuren C-Funktion zulässig. Wenn Sie diese Dinge, um verschiedene Dinge ändern können Sie etwas tun:

XMLReader::options_t XMLReader::options = { 
     L"mama", 
     L"am0r3", 
     L"am0r3", 
     L"am0r3", 
     L"am0r3" 
     L"am0r3" 
}; 

, die über Ihren Versuch bevorzugt wird, um dynamisch die Mitglieder zu initialisieren, wenn nur dein undefinierten Verhalten aufrufen (Sie 50 Zeichen aus einer Zeichenkette nicht kopieren können wörtliche das hat nur 5).

Nicht zuletzt verwenden Sie keine Zeichen-Arrays. Verwenden Sie std::string. Verwenden Sie std::wstring, wenn Sie (nicht in Visual Studio nicht kompatible) breite Zeichen verwenden müssen.

Verwandte Themen