2 Dimensionale std::arrays? Wie deklarier ich die?
-
Ok, habs jetzt hinbekommen. Ich hab die ganze Zeile in das Hauptprogramm gepackt und nicht global definiert, dann gehts.
// Schiffe versenken.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung. // #include "stdafx.h" #include "functions.h" #include <array> int _tmain(int argc, _TCHAR* argv[]) { array<array<int, 4>, 3> abc;Aber ich hab doch schon
#include <array> in der functions.h stehen, warum muss ich das dann im Hauptprogramm nochmal includen?Und die Warnung unreferenzierte lokale Variable kommt warscheinlich daher, dass sie noch nirgendwo verwendet wird, oder?
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?
EDIT2: Außerdem habe ich im Hauptprogramm noch SetConsoleTitleA(); stehen, aber da hab ich die windows.h nur einmal in der functions.h eingebunden, musste sie im Hauptprogramm nicht mehr einbinden. Jetzt ist meine Frage halt, warum ich das bei array machen muss.
-
...
-
Swordfish schrieb:
Weniger als Antwort an dich als eher eine Frage an Leute, die sich mit PCH auskennen: Könnte das hier reinpfuschen?
Neee. Aber ich wette, dass der Fehler irgendwo zwischen Zeile 1 und Zeile 14 in functions.h liegt.
-
...
-
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.
-
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?
-
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
