2 Dimensionale std::arrays? Wie deklarier ich die?



  • ...



  • Ok, Danke für eure Hilfe 🙂

    Habe den Fehler mit dem array gelöst bekommen, indem ich Visual Studio neugestartet hab. Keine Ahnung warum das danach auf einmal ging, auf jeden Fall klappt jetzt alles so wie ihr gesagt habt 😉

    Danke nochmal an alle 👍 👍



  • Auf den ersten Blick fehlt da entweder ein using namespace std; oder du solltest den Typnamen voll qualifizieren: std::array<std::array<int,3>,3> .



  • Also using namespace std; hab ich in die function.h geschrieben unter die includes.


  • Mod

    jkhsjdhjs schrieb:

    Also using namespace std; hab ich in die function.h geschrieben unter die includes.

    Und das ist auf mehrere Arten und Weisen falsch. Erstens wurde dir schon gesagt, dass ein using namespace niemals(!) in einen Header gehört. Zweitens steht es so doch vor dem #include<array> (include ist eine einfache Textersetzung!), wodurch es das std::array eben nicht im globalen Namensraum bekannt macht.



  • ...



  • Funktioniert doch jetzt alles.

    Aber gut, hier:

    Schiffe versenken.cpp:

    // Schiffe versenken.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
    //
    #include "stdafx.h"
    #include "functions.h"
    
    using namespace std;
    
    int _tmain(int argc, _TCHAR* argv[]) {
    	array<array<int, 4>, 2> abc;
    	system("mode con:cols=197 lines=70"); //Fenstergröße ändern
    	setlocale(LC_ALL, "German"); //damit Umlaute angezeigt werden können
    	SetConsoleTitleA("C++ Schiffe Versenken 2"); //Konsolenfenstertitel ändern
    	Field(PLAYER); //Spielfeld des Spielers anzeigen
    	/*for(;;)printf("%d", getKey());*/
    	PlayerPlaceFlattop(); //Spieler platziert den Flugzeugträger
    	_getch();
    }
    

    functions.h auf Pastebin, wäre zu lang für hier.

    EDIT: Also mit "es funktioniert allles" meine ich nicht, dass das Spiel funktioniert, sondern das ich das mit den std::arrays hinbekommen hab.



  • ...



  • Wie trickreich er das gemacht hat, dass in Zeile 14 jetzt einfach nichts steht 🤡



  • Swordfish schrieb:

    Dir ist schon klar, daß man Header dort einbindet, wo sie benötigt werden? Daß in Header Deklarationen kommen und in Sourcefiles die Definitionen?

    Also sollte ich die clocale zum Beispiel in die Schiffe versenken.cpp einbinden, weil dort setlocale verwendet wird?

    Und was, wenn ich in beiden Dateien den gleichen Header brauche, z.B. iostream. Den soll ich dann aber nur in die functions.h einbinden, oder?

    Und an SeppJ: Warum soll ein using namespace std nicht in die functions.h?
    Soll ich dann immer std:: davor schreiben?


  • Mod

    jkhsjdhjs schrieb:

    Swordfish schrieb:

    Dir ist schon klar, daß man Header dort einbindet, wo sie benötigt werden? Daß in Header Deklarationen kommen und in Sourcefiles die Definitionen?

    Also sollte ich die clocale zum Beispiel in die Schiffe versenken.cpp einbinden, weil dort setlocale verwendet wird?

    Ja.

    Und was, wenn ich in beiden Dateien den gleichen Header brauche, z.B. iostream. Den soll ich dann aber nur in die functions.h einbinden, oder?

    Nein, nur wenn functions.h tatsächlich selber etwas aus iostream benutzt. Sammelheader hingegen sind meistens eher eine schlechte Idee.

    Und an SeppJ: Warum soll ein using namespace std nicht in die functions.h?
    Soll ich dann immer std:: davor schreiben?

    Lies die Antworten im Thread:

    Swordfish schrieb:

    jkhsjdhjs schrieb:

    EDIT: Und ja, ich habe das using namespace std; in der functions.h stehen. Ist es nicht gut, wenn man using namespace std verwendet oder warum das bitte nicht?

    Echt toller Link - auch mit anderen Eingaben benutzbar!



  • Ah, ok. Weil sonst andere cpp Dateien, die den Header verwenden, automatisch using namespace std mit drin haben. Ich werd dann in functions.h überall std:: davor schreiben. Danke!

    EDIT: Wie sähe eigentlich ein typedef für ein 2d std::array aus?



  • jkhsjdhjs schrieb:

    EDIT: Wie sähe eigentlich ein typedef für ein 2d std::array aus?

    template <typename T, size_t dim0, size_t dim1>
    using array2d = std::array<std::array<T, dim0>, dim1>;
    


  • Marthog schrieb:

    jkhsjdhjs schrieb:

    EDIT: Wie sähe eigentlich ein typedef für ein 2d std::array aus?

    template <typename T, size_t dim0, size_t dim1>
    using array2d = std::array<std::array<T, dim0>, dim1>;
    

    Danke 😉


Anmelden zum Antworten