JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=7ef7a57e5db4f35a5f8a3c7bca35a5f9Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

CDirect3D missing ";" before "."

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
newby
JLI'ler



Anmeldedatum: 17.08.2007
Beiträge: 106

Medaillen: Keine

BeitragVerfasst am: 27.09.2007, 08:40    Titel: CDirect3D missing ";" before "." Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 27.09.2007, 09:53    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
newby
JLI'ler



Anmeldedatum: 17.08.2007
Beiträge: 106

Medaillen: Keine

BeitragVerfasst am: 27.09.2007, 10:39    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 27.09.2007, 11:02    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
newby
JLI'ler



Anmeldedatum: 17.08.2007
Beiträge: 106

Medaillen: Keine

BeitragVerfasst am: 27.09.2007, 13:01    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
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

Impressum