Problem mit Headerdateien
-
Liebes Forum,
ich sitze hier gerade über einem Problem, das ich einfach nicht gelöst bekomme.
Ich habe hier zwei Klassen, wovon die eine die andere einbindet, die andere allerdings nicht die Erste. Dennoch bekomme ich beim Buildvorgang immer folgende Meldung um die Ohren gehauen:Line 4: error2061: Syntaxfehler: Bezeichner 'Block'
Nachfolgend noch die beiden Klassen:
Block.h:
#ifndef BLOCK_H #define BLOCK_H class Block { public: /** Default constructor */ Block(); /** Default destructor */ virtual ~Block(); /** Gets the block´s id */ virtual int VGetId(); /** Renders the block */ virtual void VRender(); protected: int m_BlockId; private: } #endif // BLOCK_HBlock.cpp:
#include "Gameplay/Objects/Block.h" Block::Block() { //ctor this->m_BlockId = 0; } Block::~Block() { //dtor } int Block::VGetId() { return this->m_BlockId; } void Block::VRender() { }und main.c:
#include <windows.h> #include <GL/glew.h> #include "Gameplay/Objects/Block.h" LRESULT CALLBACK WindowProc(HWND, UINT, WPARAM, LPARAM); void EnableOpenGL(HWND hwnd, HDC*, HGLRC*); void DisableOpenGL(HWND, HDC, HGLRC); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { WNDCLASSEX wcex; HWND hwnd; HDC hDC; HGLRC hRC; MSG msg; BOOL bQuit = FALSE; float theta = 0.0f; /* register window class */ wcex.cbSize = sizeof(WNDCLASSEX); wcex.style = CS_OWNDC; wcex.lpfnWndProc = WindowProc; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = hInstance; wcex.hIcon = LoadIcon(NULL, IDI_APPLICATION); wcex.hCursor = LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); wcex.lpszMenuName = NULL; wcex.lpszClassName = "CodeWorld"; wcex.hIconSm = LoadIcon(NULL, IDI_APPLICATION);; if (!RegisterClassEx(&wcex)) return 0; /* create main window */ hwnd = CreateWindowEx(0, "CodeWorld", "CodeWorld alpha", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 256, 256, NULL, NULL, hInstance, NULL); ShowWindow(hwnd, nCmdShow); /* enable OpenGL for the window */ EnableOpenGL(hwnd, &hDC, &hRC); Tesselator *tesselator = Tesselator::Get(); /* program main loop */ while (!bQuit) { /* check for messages */ if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { /* handle or dispatch messages */ if (msg.message == WM_QUIT) { bQuit = TRUE; } else { TranslateMessage(&msg); DispatchMessage(&msg); } } else { /* OpenGL animation code goes here */ glClearColor(0.0f, 0.0f, 0.0f, 0.0f); glClear(GL_COLOR_BUFFER_BIT); glPushMatrix(); glRotatef(theta, 1.0f, 0.0f, 0.0f); glBegin(GL_TRIANGLES); glColor3f(1.0f, 0.0f, 0.0f); glVertex2f(0.0f, 1.0f); glColor3f(0.0f, 1.0f, 0.0f); glVertex2f(0.87f, -0.5f); glColor3f(0.0f, 0.0f, 1.0f); glVertex2f(-0.87f, -0.5f); glEnd(); glPopMatrix(); SwapBuffers(hDC); theta += 1.0f; Sleep (1); } } /* shutdown OpenGL */ DisableOpenGL(hwnd, hDC, hRC); /* destroy the window explicitly */ DestroyWindow(hwnd); return msg.wParam; } LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_CLOSE: PostQuitMessage(0); break; case WM_DESTROY: return 0; case WM_KEYDOWN: { switch (wParam) { case VK_ESCAPE: PostQuitMessage(0); break; } } break; default: return DefWindowProc(hwnd, uMsg, wParam, lParam); } return 0; } void EnableOpenGL(HWND hwnd, HDC* hDC, HGLRC* hRC) { PIXELFORMATDESCRIPTOR pfd; int iFormat; /* get the device context (DC) */ *hDC = GetDC(hwnd); /* set the pixel format for the DC */ ZeroMemory(&pfd, sizeof(pfd)); pfd.nSize = sizeof(pfd); pfd.nVersion = 1; pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER; pfd.iPixelType = PFD_TYPE_RGBA; pfd.cColorBits = 24; pfd.cDepthBits = 16; pfd.iLayerType = PFD_MAIN_PLANE; iFormat = ChoosePixelFormat(*hDC, &pfd); SetPixelFormat(*hDC, iFormat, &pfd); /* create and enable the render context (RC) */ *hRC = wglCreateContext(*hDC); wglMakeCurrent(*hDC, *hRC); } void DisableOpenGL (HWND hwnd, HDC hDC, HGLRC hRC) { wglMakeCurrent(NULL, NULL); wglDeleteContext(hRC); ReleaseDC(hwnd, hDC); }Ich wette, dass es sich bei meinem Problem um ein absolutes Anfänger-Problem handelt, wofür ich mich entschuldigen möchte, da ich bisher meistens Java zum Programmieren verwendet habe. Allerdings habe ich schon verzweifelt nach "zirkularen Referenzen" gesucht, aber keine gefunden. Habe ich was übersehen?
Bitte helft mir...
.Mit vielen, lieben Grüßen,
~ EuadeLuxe ~
-
Semikolon vergessen bei:
struct Bla{ ... };//<--- fehlt bei dirDas Semikolon braucht man, weil man damit direkt Variablen deklarieren kann. Bsp:
struct Bla{ ... }bla1, bla2; //bla1 und bla2 sind vom Typ struct Bla
-
Danke für deine schnelle Antwort, nwp3,
ich habe sofort ein Semikolon angefügt und das Projekt neu erstellt, allerdings bekomme ich immer noch genau dieselbe Fehlermeldung.... habe noch etwas anderes übersehen?

-
Vielleicht helfen euch Informationen über meinen benutzten Compiler und die IDE weiter, ich benutze:
* Den Microsoft Visual Studio 2010 Compiler,
* und Code::Blocks als IDE
-
In Zeile 18 der Block.h fehlt auch ein ;
-
@Ramanujan: Dieses Semikolon habe ich schon angehängt, allerdings ändert dies nichts an der Fehlermeldung. Allerdings ist mir mittlerweile etwas merkwürdiges aufgefallen, was eig. für eine "zirkulare Referenz" sprechen würde (denke ich):
Sobald ich den Include von Block.h aus main.c nehme, erhalte ich keinen Fehler mehr (kann aber natürlich auch keine Instanzen von Block erzeugen).
-
Liebes Forum,
ich danke euch für eure Hilfe, ich habe das Problem jetzt lösen können:
Nachdem ich ein neues Projekt erstellt und die Dateien (außer main.c) importiert hatte, habe ich eine Datei mit dem Namen main.cpp) erstellt, und siehe da, es geht. Warum ist mir leider noch unklar, vllt. könnt ihr mir sagen warum es nun auf einmal funktioniert?Mit vielen, lieben Grüßen,
~ EuadeLuxe ~
-
Weil main.c durch den C-Compiler gejagt wird. In C gibt es keine Klassen, daher ist die Syntax unbekannt -> Fehlermeldungen. Durch .cpp weiß deine IDE, dass er den C++-Compiler verwenden muss.
-
Danke, theliquidwave,
jetzt weiß ich ja, was ich das nächste Mal zu tun habe. Das hat mir echt Kopfzerbrechen bereitet. Jetzt muss ich nur noch rausfinden, wie ich die Datei in meinem Projekt umbenenne in Code::Blocks. Nach mal vielen, lieben Dank euch allen.

Liebe Grüße,
~ EuadeLuxe ~
-
Maybe your computer is hacked! lol
-
YES WE SCAN !
thanks obama