2016-04-28 3 views
0

Ich schrieb eine kurze Vorlage-Methode für ein Schulprojekt, und bekomme seltsame Syntaxfehler, die ich nicht verstehe. Sie haben etwas mit der Vorlage zu tun, die ich deklariert habe (beim Auskommentieren des Headers, der die Vorlage enthält, verschwinden alle Fehler in main()), aber ich kann nicht herausfinden, was vor sich geht. Ich schließe und "intersectHeader.h" ein und verwende den std-Namespace. In meiner main() - Funktion deklariert ich nur einen Vektor:Syntaxfehler in Template-Methode, die ich nicht verstehe

vector v1; Das gibt mir über diese Fehler

template<typename T> 
vector<T> intersect(const vector<T> & v1, const vector<T> & v2)  
{  
    vector<T> resultVector; 

    bool duplicate = false; 

    for (int i = 0; i < v1.size(); i++) 
    { 
     duplicate = false; 
     for (int j = 0; j < v2.size(); j++) 
     { 
      if (v1[i] == v2[j]) 
      { 
       for (int a = 0; a < resultVector.size(); a++) 
       { 
        if (v1[i] == resultVector[a]) 
        { 
         duplicate = true; 
         break; 
        } 
       } 

       if (!duplicate) 
       { 
        resultVector.push_back(v1[i]); 
       } 
      } 
     } 
    } 

    return resultVector; 
} 

: - Fehler: C2065 'string' nicht deklarierter Bezeichner, C2065 'v1' nicht deklarierter Bezeichner, C2065 'Vektor' nicht deklarierter Bezeichner

Dies ist die Vorlage:

C2988 unkenntlich Template-Deklaration/definition, C2143 Syntax Fehler fehlen; vor '<', C2059 Syntaxfehler '<'.

All das in der zweiten Zeile auftreten "Vektor schneiden (const Vektor & v1, const Vektor & v2)"

+0

Ich weiß nicht, warum die <> sind nicht im Code zeigt, aber die Erklärung ist: template Vektor schneiden (const Vektor & v1, const Vektor & v2) und die variable Vektor Ergebnisvektor; – Rick

+2

Kopieren Sie bitte die vollständige Fehlerausgabe in den Hauptteil der Frage, verwenden Sie eine Codeformatierung, so dass alle Zeichen angezeigt werden. Auch bitte (z. B. Kommentare), wo im Code die Fehler sind. Und wenn möglich, versuchen Sie, ein [minimales, vollständiges und verifizierbares Beispiel] (http://stackoverflow.com/help/mcve) zu erstellen, das Sie uns zeigen können. –

+0

Zeigen Sie mindestens alle Includes und "using namespace" -Dinge, die Sie haben. Oder besser, entfernen Sie alle using-Anweisungen und setzen Sie die entsprechenden Namen mit dem entsprechenden Qualifier voran. – Mat

Antwort

1

Sie nicht using namespace std in allen Header-Dateien tun sollten. Sie sollten den expliziten std::-Namespace zu Ihrer Vorlagenimplementierung hinzufügen, und das Problem sollte verschwinden (vorausgesetzt, Sie haben die entsprechenden Header der Standardbibliothek hinzugefügt).

+0

Das hat es gelöst, vielen Dank! – Rick

+0

@Rick: Gern geschehen. Bitte beachten Sie, dass Sie diese Antwort akzeptieren, indem Sie auf das Häkchen auf der linken Seite klicken. Willkommen bei SO. –