Probleme mit Strukturen in Klassen
-
Hey @all,
und zwar habe ich folgende Klasse:
Deklaration:#ifndef DATA #define DATA #include <iostream> #include <string> #include <vector> #include <exception> #include <fstream> using namespace std; class DataA { private: struct _DataX { typedef vector<string> StrVec; StrVec Other; StrVec Comment; _DataX(StrVec _Other, StrVec _Comment) { for(unsigned int i=0; i<_Other.size(); i++) this->Other.push_back(_Other[i]); for(unsigned int i=0; i<_Comment.size(); i++) this->Comment.push_back(_Comment[i]); } }; typedef vector<_DataX> DataX; DataX::iterator DataIter; public: DataA(); ~DataA(); int getMaxDataX(); void addData(vector<string>, vector<string>); }; #endif
Definition:
#include "dataa.hpp" DataA::DataA() { } DataA::~DataA() { } void DataA::addData(vector<string> t1, vector<string> t2) { DataX.push_back(_DataX(t1, t2)); } int DataA::getMaxDataX() { cout << (*DataX).Other[0]; return 0; }
Wenn ich das kompiliere bekomme ich diese zwei Fehlermeldungen:
1. "dataa.cpp": E2108 Ungültige Verwendung von typedef 'DataA::DataX' in Funktion DataA::addData(vector<string,allocator<string> >,vector<string,allocator<string> >)
2. "dataa.cpp": E2108 Ungültige Verwendung von typedef 'DataA::DataX' in Funktion DataA::getMaxDataX()Kann mir jemand sagen, wo da der Fehler liegt?
Vielen Dank im VorausMfG Roman1311
-
Hallo,
DataX ist doch ein Typ (hast du ja selber mit deinem typedef festgelegt). Du solltest erst eine Instanz darauf erstellen (in deiner Klasse).
Noch ein paar Anmerkungen.
1. Dein Konstruktor von _DataX ist reichlich umständlich. Nimm doch eine Initialisierungsliste.
2. entferne das using namespace std; aus deinem Header. Du öffnest damit den Namensraum für alle Dateien in den du Ihn includierstCiao
-
Vielen Dank für die schnelle Antwort, da ist mir wohl ein schlampigkeits fehler unterlaufen, bezüglich "using namespace std;": Soll ich in der cpp Datei diese auch nicht verwenden, oder nur in der Header? Die hängen doch zusammen oder?
MfG Roman1311
-
In der cpp kannst du das getrost verwenden. Du musst aber nicht. Die using namespace Direktive ist letztenedes bloss eine Erleichterung für dich, damit du nicht immer den Namensraum hinschreiben musst.