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;
    };
    
    #endif
    

    mal 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)


Anmelden zum Antworten