Fehler beim nutzen eines structs
-
Heyo. Ich arbeite für die Uni aktuell an einem Space-Invaders Klon. Ich habe folgendes struct in meinem Code:
Header:
struct CanvasCoord { public: CanvasCoord(short p_sX, short p_sY); CanvasCoord(); short X; short Y; bool operator==(const CanvasCoord& other) const; };
CPP File:
#include "Canvas.h" CanvasCoord::CanvasCoord(short p_sX, short p_sY) { X = p_sX; Y = p_sY; } CanvasCoord::CanvasCoord() { } bool CanvasCoord::operator==(const CanvasCoord& other) const { return (X == other.X && Y == other.Y); }
Nutze ich dieses struct nun:
#include <vector> #include <string> #include "Canvas.h" class CCanvasChar { public: CCanvasChar(std::vector<std::vector<std::string>> p_vCharLayout, CanvasCoord p_cStartPos); CCanvasChar(std::vector<std::vector<std::string>> p_vCharLayout, short p_cStartPosX, short _cStartPosY); std::vector<std::vector<std::string>> M_vLayout; CanvasCoord M_cStartPos; };
bekomme ich den Fehler
"C2061 Syntaxfehler: Bezeichner "CanvasCoord"" und
"C4430 Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt"Ich verstehe null woher diese Fehler kommen. Könnt ihr mir weiterhelfen? Danke schon mal!
-
Hast du vielleicht irgendwo eine Funktionssignatur, wo der Rückgabewert nicht angegeben ist? In solchen Fällen darf ein C-Compiler
int
als Rückgabetyp annehmen, C++ Compiler dürfen das nicht.
Schreibfehler in Klassennamen können dazu führen, dass der Konstruktor nicht als Konstruktor erkannt wird, sondern als normale Funktion ohne Rückgabewert. Kann das bei dir der Fall sein (vergl.CanvasCoord
undCCanvasChar
, haste da vielleicht was verwechselt?)
-
Die Fehler sollten auch sagen, wo sie auftreten. Und das ist wohl nicht im hier gezeigten Code.
Mit dem obigen Code kann man das nämlich nicht nachvollziehen. Wenn man das, was du unter "Header" stehen hast, in den Code unter "Nutze ich dieses struct nun" reinkopiert (an die Stelle des
#include "Canvas.h"
), dann kompiliert der Code ohne Fehler (mit gcc -c)