Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

22.07.2006, 22:15

Frage zu Listing 8.8 Dateien ein -und ausgabe

Ich habe ein DirectX Program geschrieben und möchte nun mit dem in
Listing 8.8 beschriebenen Beispiel eine Variable in eine Datei speichern.

Geht das nur in der Konsole?, da beim erstellen seltsame fehler entstehen

Sobald ich die Datei <fstream> einbinde kommen eine ganze Menge Warnungen z.B.:

Quellcode

1
2
3
4
5
6
C:\Programme\Microsoft Visual Studio .NET 2003\Vc7\include\cstdio(25) : warning C4995: 'gets': der Name, der als #pragma markiert war, wurde verworfen
C:\Programme\Microsoft Visual Studio .NET 2003\Vc7\include\cstdio(29) : warning C4995: 'sprintf': der Name, der als #pragma markiert war, wurde verworfen
C:\Programme\Microsoft Visual Studio .NET 2003\Vc7\include\cstdio(32) : warning C4995: 'vsprintf': der Name, der als #pragma markiert war, wurde verworfen
C:\Programme\Microsoft Visual Studio .NET 2003\Vc7\include\cstring(19) : warning C4995: 'strcat': der Name, der als #pragma markiert war, wurde verworfen
C:\Programme\Microsoft Visual Studio .NET 2003\Vc7\include\cstring(20) : warning C4995: 'strcpy': der Name, der als #pragma markiert war, wurde verworfen
C:\Programme\Microsoft Visual Studio .NET 2003\Vc7\include\cwchar(24) : warning C4995: 'swprintf': der Name, der als #pragma markiert war, wurde verworfen


Und wenn ich dann in die Datei schreiben will kommen folgende Fehler:

Quellcode

1
2
3
4
5
6
7
8
9
CModel.cpp(116) : error C2065: 'ofstream': nichtdeklarierter Bezeichner
CModel.cpp(116) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'Output'
CModel.cpp(116) : error C3861: 'Output': Bezeichner wurde auch mit einer argumentbezogenen Suche nicht gefunden
CModel.cpp(117) : error C2228: Der linke Teil von '.write' muss eine Klasse/Struktur/Union sein
        Typ ist ''unknown-type''
CModel.cpp(117) : error C3861: 'Output': Bezeichner wurde auch mit einer argumentbezogenen Suche nicht gefunden
CModel.cpp(119) : error C2228: Der linke Teil von '.close' muss eine Klasse/Struktur/Union sein
        Typ ist ''unknown-type''
CModel.cpp(119) : error C3861: 'Output': Bezeichner wurde auch mit einer argumentbezogenen Suche nicht gefunden


Wie kann ich das Problem umgehen oder was mache ich falsch?

Anonymous

unregistriert

2

22.07.2006, 22:32

Gib mal den Code von CModel.cpp und CModel.hpp/h

3

22.07.2006, 23:23

Der andere Code kann damit ja eigendlich nichts zutun haben, aber gut hier ist er:
CModel.cpp:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#include "LiCo.h" 

CModel::CModel()
{
    LPD3DXMESH              g_pMesh = NULL; // Our mesh object in sysmem

    D3DMATERIAL9*           g_pMeshMaterials = NULL; // Materials for our mesh

    LPDIRECT3DTEXTURE9*     g_pMeshTextures = NULL; // Textures for our mesh

    DWORD                   g_dwNumMaterials = NULL;   // Number of mesh material

}
HRESULT CModel::LoadModel(char szFile[260])
{   
    

    // Load the mesh from the specified file

    if( FAILED( D3DXLoadMeshFromX((szFile), D3DXMESH_SYSTEMMEM, 
                                   g_pCD3D->GetDevice(), NULL, 
                                   &pD3DXMtrlBuffer, NULL, &g_dwNumMaterials, 
                                   &g_pMesh ) ) )
    {
        // If model is not in current folder, try parent folder

        if( FAILED( D3DXLoadMeshFromX((szFile), D3DXMESH_SYSTEMMEM, 
                                    g_pCD3D->GetDevice(), NULL, 
                                    &pD3DXMtrlBuffer, NULL, &g_dwNumMaterials, 
                                    &g_pMesh ) ) )
        {
            
            return 0;
        }
    }

    // We need to extract the material properties and texture names from the 

    // pD3DXMtrlBuffer

    d3dxMaterials = (D3DXMATERIAL*)pD3DXMtrlBuffer->GetBufferPointer();
    g_pMeshMaterials = new D3DMATERIAL9[g_dwNumMaterials];
    if( g_pMeshMaterials == NULL )
        return E_OUTOFMEMORY;
    g_pMeshTextures  = new LPDIRECT3DTEXTURE9[g_dwNumMaterials];
    if( g_pMeshTextures == NULL )
        return E_OUTOFMEMORY;

    for( DWORD i=0; i<g_dwNumMaterials; i++ )
    {
        // Copy the material

        g_pMeshMaterials[i] = d3dxMaterials[i].MatD3D;

        // Set the ambient color for the material (D3DX does not do this)

        g_pMeshMaterials[i].Ambient = g_pMeshMaterials[i].Diffuse;

        g_pMeshTextures[i] = NULL;
        if( d3dxMaterials[i].pTextureFilename != NULL && 
            lstrlen(d3dxMaterials[i].pTextureFilename) > 0 )
        {
            // Create the texture

            if( FAILED( D3DXCreateTextureFromFile( g_pCD3D->GetDevice(), 
                                                d3dxMaterials[i].pTextureFilename, 
                                                &g_pMeshTextures[i] ) ) )
            {
                // If texture is not in current folder, try parent folder

                const TCHAR* strPrefix = TEXT("..\\");
                TCHAR strTexture[MAX_PATH];
                StringCchCopy( strTexture, MAX_PATH, strPrefix );
                StringCchCat( strTexture, MAX_PATH, d3dxMaterials[i].pTextureFilename );
                // If texture is not in current folder, try parent folder

                if( FAILED( D3DXCreateTextureFromFile( g_pCD3D->GetDevice(), 
                                                    strTexture, 
                                                    &g_pMeshTextures[i] ) ) )
                {
                    MessageBox(NULL, "Could not find texture map", "Meshes.exe", MB_OK);
                }
            }
        }
    }

    // Done with the material buffer

    pD3DXMtrlBuffer->Release();

    return S_OK;
}
void CModel::RenderModel()
{
    for( DWORD i=0; i<g_dwNumMaterials; i++ )
        {
            // Set the material and texture for this subset

            g_pCD3D->GetDevice()->SetMaterial( &g_pMeshMaterials[i] );
            g_pCD3D->GetDevice()->SetTexture( 0, g_pMeshTextures[i] );
        
            // Draw the mesh subset

            g_pMesh->DrawSubset( i );
        }
}
HRESULT CModel::SaveModel(char File[260])
{

    int a=360;//Das ist als Test gedacht

    ofstream Output ("a.LICO3D", NULL);//Fehler

    Output.write ((char*) &a, sizeof (a));

    Output.close();

    return S_OK;
}

CModel.h:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// Klasse für 3D-Modelle

class CModel
{

private:
    // Variablen

    LPD3DXMESH              g_pMesh; // Our mesh object in sysmem

    D3DMATERIAL9*           g_pMeshMaterials; // Materials for our mesh

    LPDIRECT3DTEXTURE9*     g_pMeshTextures; // Textures for our mesh

    DWORD                   g_dwNumMaterials;   // Number of mesh materials

    LPD3DXBUFFER            pD3DXMtrlBuffer;
    D3DXMATERIAL*           d3dxMaterials;


public:
    // Konstruktor und Destruktor

    CModel();
    ~CModel();

    // Methoden

    HRESULT LoadModel(char szFile[260]);
    HRESULT SaveModel(char File[260]);
    void RenderModel();

    
};

Und in Lico.h steht natürlich:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//Andere

#include <Windows.h>
#include <DInput.h>
#include <d3dx9.h>
#include <strsafe.h>
#include <mmsystem.h>
#include <stdio.h>
#include <stdlib.h>
#include <fstream>

//Eigene

#include "singleton.h"
#include "CDirect3D.h"
#include "CTimer.h"
#include "CCamera.h"
#include "COption.h"
#include "CMain.h"
#include "resource.h"
#include "CModel.h"

Anonymous

unregistriert

4

22.07.2006, 23:28

Das dieser Code noch keinen Neustart erzwungen hat wundert mich zutiefst.

Zurück zum Thema: ofstream liegt in einem Namespace. und die Dateien <stdio.h> <stdlib.h> sind veraltet.

5

22.07.2006, 23:31

Du musst vor das ofstream noch ein std:: setzen, da es in dem Namespace hockt!

P.S.: cstdio benutzen!

EDIT: Mist zu spät...

Werbeanzeige