2016-09-24 4 views
-1

Ich habe gerade nach langer Zeit mit der Programmierung in C++ begonnen, und vielleicht fehlt mir hier etwas syntaktisch Offensichtlich, aber ich habe lange gesucht und kann keine finden Verweis auf mein Problem überall. Ich versuche, eine benutzerdefinierte C++ - Klasse für set und multiset zu erstellen.Syntaxfehler: fehlende ',' vor '<'

Hier ist meine Klasse cset.h

#pragma once 
#include <set> 
#include "cmultiset.h" 

template <class Type> 

class Set : public set<Type> 
{ 
private: 

public: 
    void add(Type &); 
}; 

Und hier ist mein cmultiset.h

#pragma once 
#include <set> 

template <class Type> 

class MultiSet : public multiset<Type> 
{ 
private: 

public: 
    bool operator < (MultiSet <Type> &); 
}; 

Was ich versuche, hier zu tun ist, eine Set<MultiSet<int>> in meinem Fahrer erstellen Klasse. Aber erhalten Sie den folgenden Fehler zweimal für jede Datei stattdessen in den obigen Header-Dateien um class Set : public set<Type> und .

syntax error: missing ',' before '<' 

Ich weiß nicht, wie Sie diesen Fehler beheben können.

Wenn ich nur set<MultiSet<int>> benutze funktioniert alles gut: keine Fehler keine Warnungen (ich muss using namespace std; vor der Vorlage hinzufügen). Aber wenn ich Set<MultiSet<int>> benutze gibt es den Fehler und using namespace std funktioniert nicht.

Edit 1:

Fehler:

Severity Code Description Project File Line Suppression State 
Error C2143 syntax error: missing ',' before '<' Integer Sets Analyzer c:\users\abbas\documents\mega\personal projects\integer sets analyzer\integer sets analyzer\cmultiset.h 6 
Error C2143 syntax error: missing ',' before '<' Integer Sets Analyzer c:\users\abbas\documents\mega\personal projects\integer sets analyzer\integer sets analyzer\cmultiset.h 6 
Error C2143 syntax error: missing ',' before '<' Integer Sets Analyzer c:\users\abbas\documents\mega\personal projects\integer sets analyzer\integer sets analyzer\cset.h 7 
Error C2143 syntax error: missing ',' before '<' Integer Sets Analyzer c:\users\abbas\documents\mega\personal projects\integer sets analyzer\integer sets analyzer\cmultiset.h 6 
Error C2143 syntax error: missing ',' before '<' Integer Sets Analyzer c:\users\abbas\documents\mega\personal projects\integer sets analyzer\integer sets analyzer\cset.h 7 

Edit 2:

Hier ist meine main.cpp

#include "stdafx.h" 
#include <iostream> 
#include <fstream> 
#include <string> 
#include <conio.h> 
#include "cmultiset.h" 
#include "cset.h" 

using namespace std; 

int main() 
{ 
    Set<MultiSet <int>> intSet; 

    intSet.clear(); 

    _getch(); 

    return 0; 
} 
Hier

ist mein MultiSet.cpp

#pragma once 
#include "stdafx.h" 
#include "cmultiset.h" 

using namespace std; 

template <class Type> 
bool MultiSet<Type>::operator < (MultiSet<Type> & cmpSet) 
{ 
    if (this->size() < cmpSet.size()) 
    { 
     return true; 
    } 
    else if (this->size() > cmpSet.size()) 
    { 
     return false; 
    } 

    for (multiset<Type>::iterator it = this->begin(), jt = cmpSet.begin(); it != this->end(), jt != cmpSet.end(); ++it, ++jt) 
    { 
     if (*it < *jt) 
      return true; 
    } 

    return false; 
} 

Hier ist meine Set.cpp.

#pragma once 
#include "stdafx.h" 
#include "cset.h" 

using namespace std; 

template <class Type> 
void Set<Type> :: add(Type & entry) 
{ 
    set<Type>::insert(entry); 
} 
+5

** Bad ** Idee erben von 'std :: container'-s, BTW. – edmz

+0

Ja, ich weiß von 'std :: container' zu erben und Speicher zu löschen. Ich möchte es trotzdem tun – Abbas

+4

Bitte versuchen Sie ein [Minimal, Complete und Verifizierbares Beispiel] (http://stackoverflow.com/help/mcve) zu erstellen und zeigen Sie uns. Und enthalten Sie auch die vollständige Fehlerausgabe, vollständig und unbearbeitet (auch wenn es so lang ist, wie es ist, wenn Vorlagen beteiligt sind). –

Antwort

1

In class Set : public set<Type> sollte es std::set statt set sein.

Der Compiler gibt einen Syntaxfehler, andernfalls set ist eine Klassenvorlage.

Es gibt ein ähnliches Problem mit multiset im nächsten Teil.

NB. Standardcontainer sind nicht dazu bestimmt, vererbt zu werden; Ziehen Sie stattdessen die Verwendung von Containment in Betracht (d. h. den Container als Elementvariable verwenden).

1

Sie nicht set<Type> in Ihrem "cset.h" Header schreiben. Das muss std::set<Type> sein.

Es könnte mehr Fehler geben, aber das war der erste, den ich sah.

Fix das, dann kompilieren Sie erneut, beheben Sie den nächsten ersten Fehler, und so weiter und weiter.


By the way, ist es eine gute Idee zu kompilieren, wenn Sie ein paar Zeilen Code geschrieben haben, und nicht warten, mit dem Kompilieren, bis Sie Tonnen Code geschrieben haben.

Verwandte Themen