|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
newby JLI'ler
Anmeldedatum: 17.08.2007 Beiträge: 106
Medaillen: Keine
|
Verfasst am: 27.09.2007, 08:40 Titel: CDirect3D missing ";" before "." |
|
|
Hallo,
ich hab eine Frage zu der Klasse CDirect3D. Ich hab die drei Dateien der Klasse (Direct3D.h, Direct3D.cpp und Global.h) zu meinem Projekt hinzugefügt und die Direct3D.h inkludiert. Wenn ich jetzt versuche eine Methode der Klasse aufzurufen, bekomme ich die Fehlermeldung:
Code: |
-------------- Build: default in testclass ---------------
Classtest.cpp
Classtest.cpp(14) : error C2143: syntax error : missing ';' before '.'
Classtest.cpp(14) : error C2143: syntax error : missing ';' before '.'
Process terminated with status 1 (0 minutes, 0 seconds)
2 errors, 0 warnings
|
Ich denk mal irgendwo fehlt ein ";", aber ich hab die Klasse exakt aus dem Buch übernommen und es fehlt eigentlich kein ";".
Wisst ihr woran das liegt? |
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 27.09.2007, 09:53 Titel: |
|
|
2 Dinge: Erstens cpp statt code tags benutzen (könnte nicht ein Admin endlich mal die Postseite editieren, so dass das da DEUTLICH steht, das macht hier nämlich JEDER neue falsch) und zweitens:
Wenn dir der Kompiler sagt, dass ein ; fehlt auch ein ; Genau daran liegt es.
Ok, du bist neu, deshalb sei dir verziehen, dass du nicht weißt, das wir hier (größtenteils) keine Computer hacken und daher keinen Zugriff auf deinen Quellcode haben.
Daher solltest du uns schon dein Programm zeigen, damit wir wissen können wo da was fehlt.
PS: Wenn man in einer Header datei, z.B. bei einer Klassendefinition ganz am Ende das ; vergißt, bekommt man die Fehlermeldungen in einer Datei, welche die Header nur einbindet. Also darauf sollte man achten. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
newby JLI'ler
Anmeldedatum: 17.08.2007 Beiträge: 106
Medaillen: Keine
|
Verfasst am: 27.09.2007, 10:39 Titel: |
|
|
hier mein code:
classtest.cpp
CPP: | #include "Direct3D.h"
HWND CreateMainWindow(HINSTANCE hInstance);
LRESULT CALLBACK MessageHandler(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam);
HWND hWnd = 0;
MSG msg;
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
hWnd = CreateMainWindow(hInstance);
CDirect3D.Init(hWnd);
if(0 == hWnd)
{
MessageBox(0, "Fenster konnte nicht erzeugt werden", "Fehler", MB_OK);
return 0;
}
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
HWND CreateMainWindow(HINSTANCE hInstance)
{
WNDCLASSEX wndClass =
{
sizeof(WNDCLASSEX), // Groesse angeben
CS_DBLCLKS | CS_OWNDC | CS_HREDRAW | CS_VREDRAW, // Standardstile
MessageHandler, // Callback-Funktion
0, // Zusaetzliche Angaben
0, // nicht benoetigt
hInstance, // Anwendungsinstanz
LoadIcon(NULL, IDI_WINLOGO), // Windows-Logo
LoadCursor(NULL, IDC_ARROW), // Normaler Cursor
(HBRUSH)GetStockObject(WHITE_BRUSH), // Weisser Pinsel
NULL, // kein Menue
"WindowClass", // Der Name der Klasse
LoadIcon(NULL, IDI_WINLOGO) // Windows Logo
};
// Klasse registrieren
RegisterClassEx(&wndClass);
return CreateWindowEx(NULL, // Keine erweiterten Stile nutzen
"WindowClass", // Klassenname
"Mein Fenster", // Fenstertitel
WS_OVERLAPPEDWINDOW | // Fenster
WS_VISIBLE, // Eigenschaften
50, 50, // Anfangsposition
1024, 768, // und Groesse des Fenster
NULL, // Handle des Elternfensters
NULL, // Handle des Menues
hInstance, // Anwendungsinstanz
NULL); // wird nicht benoetigt
}
LRESULT CALLBACK MessageHandler(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_DESTROY:
PostQuitMessage(0);
return 0;
break;
}
return DefWindowProc(hwnd, msg, wParam, lParam);
}
|
Direct3D.h
CPP: | #include <d3d9.h>
#include <d3dx9.h>
#include "global.h"
#pragma comment(lib, "dxguid")
#pragma comment(lib, "d3d9")
#pragma comment(lib, "d3dx9")
class CDirect3D
{
public:
CDirect3D();
virtual ~CDirect3D();
// Direct3D initialisieren
BOOL Init(HWND hWnd, BOOL bWindowed = TRUE);
// Farbe fuer den Backbuffer festlegen
void SetClearColor(D3DCOLOR Color);
// Text an Position x, y ausgeben
void DrawText(LPCSTR Text,
int x, int y,
D3DCOLOR TextColor);
// Methoden zum Start/Beenden der Szene
void BeginScene(void);
void EndScene(void);
protected:
// Erzeugen der D3D-Schrift
void CreateFont(void);
// Freigeben der Objekte
void CleanUp(void);
// Farbe fuer den Backbuffer
D3DCOLOR m_ClearColor;
// Direct3D Variablen
LPDIRECT3D9 m_lpD3D;
LPDIRECT3DDEVICE9 m_lpD3DDevice;
LPD3DXFONT m_lpD3DFont;
};
|
Direct3D.cpp
CPP: | #include "Direct3D.h"
#include <dxerr9.h>
CDirect3D::CDirect3D()
{
m_lpD3D = NULL;
m_lpD3DDevice = NULL;
m_lpD3DFont = NULL;
}
CDirect3D::~CDirect3D()
{
CleanUp();
}
// Direct3D initialisieren
BOOL CDirect3D::Init(HWND hWnd, BOOL bWindowed)
{
// Direct3D-Objekt erzeugen
m_lpD3D = Direct3DCreate9(D3D_SDK_VERSION);
if(NULL == m_lpD3D)
{
// Fehler, D3D-Objekt wurde nicht erzeugt
return FALSE;
}
// Parameter fuer den Modus festlegen
D3DPRESENT_PARAMETERS PParams;
ZeroMemory(&PParams, sizeof(PParams));
PParams.SwapEffect = D3DSWAPEFFECT_DISCARD;
PParams.hDeviceWindow = hWnd;
PParams.Windowed = bWindowed;
PParams.BackBufferWidth = SCR_WIDTH;
PParams.BackBufferHeight = SCR_HEIGHT;
PParams.BackBufferFormat = D3DFMT_A8R8G8B8;
HRESULT hr;
// Direct3D-Geraet anlegen
if(FAILED(hr = m_lpD3D->CreateDevice(
D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,
hWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&PParams,
&m_lpD3DDevice)))
{
// Fehler, Geraet kann nicht angelegt werden
return FALSE;
}
CreateFont();
return TRUE;
}
// Farbe fuer den Backbuffer festlegen
void CDirect3D::SetClearColor(D3DCOLOR Color)
{
m_ClearColor = Color;
}
// Text an Position x, y ausgeben
void CDirect3D::DrawText(LPCSTR Text, int x, int y, D3DCOLOR TextColor)
{
RECT r = { x, y, 0, 0 };
// Groesse des Rechtecks berechnen
m_lpD3DFont->DrawText(NULL, Text, -1, &r, DT_CALCRECT, TextColor);
// Text ausgeben
m_lpD3DFont->DrawText(NULL, Text, -1, &r, DT_CENTER, TextColor);
}
// Methoden zum Start/Beenden der Szene
void CDirect3D::BeginScene(void)
{
// Puffer mit blau fuellen
m_lpD3DDevice->Clear(0, 0, D3DCLEAR_TARGET, m_ClearColor, 0, 0);
m_lpD3DDevice->BeginScene();
}
void CDirect3D::EndScene(void)
{
m_lpD3DDevice->EndScene();
m_lpD3DDevice->Present(0, 0, 0, 0);
}
// Erzeugen der D3D-Schrift
void CDirect3D::CreateFont(void)
{
// Struktur fuer die Beschreibung der Schriftart
// anlegen und Elemente mit 0 initialisieren
D3DXFONT_DESC FontDesc = { 0 };
// das Element FaceName muss den Namen der
// gewuenschten Schriftart enthalten
strcpy(FontDesc.FaceName, "Arial");
// nach erfolgreichem Aufruf zeigt lpD3DFont
// auf ein Objekt vom Typ D3DXFont
D3DXCreateFontIndirect(m_lpD3DDevice,
&FontDesc,
&m_lpD3DFont);
}
// Freigeben der Objekte
void CDirect3D::CleanUp(void)
{
// testen, ob die Objekt angelegt
// wurden und ggf. freigeben
if(NULL != m_lpD3DFont)
{
m_lpD3DFont->Release();
m_lpD3DFont = NULL;
}
if(NULL != m_lpD3DDevice)
{
m_lpD3DDevice->Release();
m_lpD3DDevice = NULL;
}
if(NULL != m_lpD3D)
{
m_lpD3D->Release();
m_lpD3D = NULL;
}
}
|
Global.h
CPP: | const int SCR_WIDTH = 800;
const int SCR_HEIGHT = 600;
|
|
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 27.09.2007, 11:02 Titel: |
|
|
Du solltest mal ein CDirect3D Objekt anlegen. Du ruftst die Init Funktion auf, ohne ein Objekt zu haben, erstelle ein Objekt und rufe die Initfunktion des Objektes auf. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
newby JLI'ler
Anmeldedatum: 17.08.2007 Beiträge: 106
Medaillen: Keine
|
Verfasst am: 27.09.2007, 13:01 Titel: |
|
|
aha, ich hab mich immer gewundert. Im Buch wird die Klasse CDirect3D definiert, aber im Quelltext steht Direct3D....!, ohne das C davor.
Danke für die Tipps. |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|