Enum deklaration---std::vector als private member
-
erstes Problem:
enum eStatus {isempty, hPlayer, pcPlayer};//error:multiple types in one declaration enum Tage {Montag, Dienstag, Mittwoch, Donerstag, Freitag, Samstag, Sonntag};Wo liegt da das Problem?
class CField { public: CField(int ranks, int files):_ranks(ranks), _files(files) { std::cout<<"CField-Ctor aufgerufen."<<std::endl; ShowField(); /*vector Größe resize()? */ } void ShowField() { std::cout<<"ShowField() aufgerufen."<<std::endl; } private: int const _ranks; int const _files; std::vector< std::vector<eStatus> > _vfield;//hier is der/die 2./3. Fehler //CField.h:30: error: using-declaration for non-member at class scope //CField.h:30: error: expected `;' before '<' token }Wie kann ich das anders machen hab bei der Suche gesehen das es mit nem Zeiger gehen könnte weiss aber nicht wo ich den * hinsetzten soll(habs auch ausprobiert)
PS:danke schon mal für eure Mühe
noch ne ganz dumme Frage wie kann ich bei Code::Blocks sachen kopieren à la copy&paste oder ausschneiden?
-
@1: Hast du einen der Enum-Namen schonmal in einem anderen Zusammenhang verwendet?
@2: "include <vector>" ?
-
Jtoomi schrieb:
erstes Problem:
class CField { };das Semikolon vergessen?
-
So das mit dem Semikolon hab ich verbessert-> ein Fehler weniger, jetzt meckert der beim
enum eStatus {isempty, hPlayer, pcPlayer};nicht mehr
jetzt meckert der nur noch beim vector rum, jetzt wäre für mich halt die Frage warum der rummeckert bzw wie kann ich es schaffen das ich den std::vector<...> als private member in der klasse hab und den im konstruktor in die richtige größe bringen kann. Das Problem scheint zu sein das ich den mehrdimensional machen will.
Jtoomi
-
Also ich hatt noch keine Probleme mit verschachtelten STL-Containern - bist du dir sicher, daß du den Header <vector> vor deiner Klassendeklaration eingebunden hast?
-
Ich danke dir für deine Beharrlichkeit beim 2.Mal hab ich dann kapiert wo der fehler lag hatte das aus irgendeinem Grund auskommentiert

[quote=Build Log]In file included from main.cpp:3:
CField.h:25: error:eStatus' was not declared in this scope CField.h:25: error: template argument 1 is invalid CField.h:25: error: template argument 2 is invalid CField.h:25: error: template argument 1 is invalid CField.h:25: error: template argument 2 is invalid CField.h:25: error: ISO C++ forbids declaration of_vfield' with no type
Process terminated with status 1 (0 minutes, 0 seconds)
6 errors, 0 warnings[/quote]
Scheint wohl in logischer Fehler zu sein bei mir ich poste mal den gesamten code#include <iostream> #include <vector> #include "CField.h" enum eStatus {isempty, hPlayer, pcPlayer}; int main() { CField TestField1(3,9); return 0; } //------------------------------------------------------------ #ifndef CFIELD_H #define CFIELD_H class CField { public: CField(int ranks, int files):_ranks(ranks), _files(files) { std::cout<<"CField-Ctor aufgerufen."<<std::endl; ShowField(); } void ShowField() { std::cout<<"ShowField() aufgerufen."<<std::endl; } private: int const _ranks; int const _files; std::vector< std::vector<eStatus> > _vfield; }; #endifmal gucken ob ihr noch was entdeckt...

-
Du deklarierst erst CField, indem Du die Datei includest. Dort wird eStatus benutzt.
Dann deklarierst Du cStatus.
Was ist an dieser Reihenfolge falsch?

-
Lass mich drüber nachdenken

ne is mir jetzt auch klar geworden
Noch eine kleine Bonusfrage wie kann ich mir auf sonen mehrdimensionalen verctor nen iterator definieren? (is das überhaupt sinnvollbzw brauch man nicht 2?)
-
klar kannst du - nennt sich vector<vector<eStatus> >::iterator
(und für den Durchlauf brauchst du tatsächlich zwei verschiedene Iteratoren, einer davon klappert den Hauptvector ab, der andere läuft über den aktuellen Untervector)