2016-05-21 23 views
-3

ich ein seltsames Verhalten in meinem Code gefunden haben (dies ist nur ein Ausschnitt):Ändern der Reihenfolge der Parameter löst Linkerfehler

void StringSplit(string b,char splitchar,vector<string>& a) {} 

int main(int argc, const char * argv[]) { 
    // insert code here... 
    string b; 
    getline(cin, b); 
    vector<string> result1; 
    StringSplit(b, ' ', result1); 
    std::cout << result1[0]; 
    return 0; 
} 

Als ich es kompilieren, erhalte ich eine Linker command failed with exit code 1, aber nicht sehe irgendwas falsch damit.

Dann wechsle ich zufällig die Reihenfolge der Parameter von StringSplit, und der Fehler ist festgelegt:

void StringSplit(char splitchar,string b,vector<string>& a) {} 

int main(int argc, const char * argv[]) { 
    // insert code here... 
    string b; 
    getline(cin, b); 
    vector<string> result1; 
    StringSplit(' ', b, result1); 
    std::cout << result1[0]; 
    return 0; 
} 

Warum es das tut?

+0

Hinweis: Die Reihenfolge der Auswertung von Funktionsargumenten ist in C++ nicht angegeben. –

+0

@JesperJuhl True, aber das kann das Verhalten hier nicht beeinflussen, da die Argumente alle unabhängig sind. –

+0

Was ist der Rest des Linker-Fehlers? – Niall

Antwort

0

..., kurz gesagt heißt es "1 doppeltes Symbol für Architektur x86_64"

Die Ursache des Fehlers der doppelten Symbole sind.

Sie haben zwei Definitionen für die Funktion, den gleichen Namen und die gleiche Signatur. Wenn sich die Funktionsdefinition in einer Kopfzeile befindet, müssen Sie einen Include-Guard inline und/oder verwenden. Wenn nicht, dann sollten Sie für den einen anderen Namen wählen, wenn es sich um verschiedene Funktionen handelt.

Wenn sie die gleiche Funktion sind, dann haben Sie die Definition in einem einzigen cpp und die Deklaration in einer Kopfzeile.

Ich habe eine Datei mit der gleichen Funktion in einer anderen Datei meines Projekts enthalten.

Da es sich um Ihre Projekte handelt, können Sie auch Namespaces untersuchen, um dabei zu helfen.

Verwandte Themen