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

Tobiking

1x Rätselkönig

  • Private Nachricht senden

11

24.06.2010, 14:56

Die standard C++ Header werden ohne .h geschrieben. Also #include <iostream> ist das einzig richtige. Wenn du iostream in C verwenden willst machst du schon einen Fehler.

Bzgl. der Linkerfehler würde ich auf zlib tippen. libpng hat zlib als Abhängigkeit,

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

12

24.06.2010, 15:03

Das Problem mit dem iostream.h habe ich jetzt schon gelöst. Ich hab halt einfach die iostream.h aus GCC nach VC kopiert. Unschön aber es geht.

Im Moment habe ich das oben genannte Linker Problem. Ich weiß einfach nicht welche .lib Datei ich brauche um das weg zu kriegen.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

13

24.06.2010, 15:08

Das Problem mit dem iostream.h habe ich jetzt schon gelöst. Ich hab halt einfach die iostream.h aus GCC nach VC kopiert. Unschön aber es geht.

Äußerst unschön, warum besserst du den Fehler nicht einfach aus indem du <iostream.h> zu <iostream> machst!? Es gibt kein iostream.h in C++.

Im Moment habe ich das oben genannte Linker Problem.

Wie Tobiking schon sagte fehlt vermutlich zlib.
Statt einfach Dateien zu kopieren (direkt ins VC Verzeichnis kopieren halte ich auch für keine so tolle Idee, dafür gibts eigentlich die VC++ Directories Einstellungen) wäre es wohl besser wenn du dir die entsprechenden Libraries auf dem vorgesehenen Weg besorgst:
http://www.zlib.net/
http://www.libpng.org/pub/png/libpng.html
http://www.ijg.org/

storage

Treue Seele

Beiträge: 138

Wohnort: Bad Salzungen

  • Private Nachricht senden

14

24.06.2010, 19:20

Nutzt du die Express Version von Visual Studio?

Wenn ja hast du auch das Windows SDK installiert?

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

15

25.06.2010, 10:45

Ja, ich habe die Express Edition und nein, installiert habe ich das Windows SDK nicht, aber der Ordner "C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\" existiert schon.

Ich habe das Projekt zwar endlich mit VisualC++ zum Laufen gebracht, aber wie bereits erwähnt, erst mal nur in dem ich ein paar Dinge ausgeklammert habe.
Diese Probleme möchte ich jetzt natürlich auch lösen =)

Zum Thema Sockets taufen folgende Fehlermeldungen auf (wegen Typenneudefinitionen):

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\winsock2.h(132) : error C2011: 'fd_set': 'struct' Typneudefinition
        C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\winsock.h(68): Siehe Deklaration von 'fd_set'
C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\winsock2.h(176) : error C2011: 'timeval': 'struct' Typneudefinition
        C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\winsock.h(111): Siehe Deklaration von 'timeval'
C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\winsock2.h(232) : error C2011: 'hostent': 'struct' Typneudefinition
        C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\winsock.h(167): Siehe Deklaration von 'hostent'
C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\winsock2.h(245) : error C2011: 'netent': 'struct' Typneudefinition
        C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\winsock.h(180): Siehe Deklaration von 'netent'
C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\winsock2.h(252) : error C2011: 'servent': 'struct' Typneudefinition
        C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\winsock.h(187): Siehe Deklaration von 'servent'
C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\winsock2.h(264) : error C2011: 'protoent': 'struct' Typneudefinition
        C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\winsock.h(199): Siehe Deklaration von 'protoent'
C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\winsock2.h(360) : error C2011: 'WSAData': 'struct' Typneudefinition
        C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\winsock.h(322): Siehe Deklaration von 'WSAData'
C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\winsock2.h(458) : error C2011: 'sockproto': 'struct' Typneudefinition
        C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\winsock.h(494): Siehe Deklaration von 'sockproto'
C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\winsock2.h(500) : error C2011: 'linger': 'struct' Typneudefinition
        C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\winsock.h(531): Siehe Deklaration von 'linger'


Das sind die Header die ich include:

C-/C++-Quelltext

1
2
3
4
5
6
7
#ifdef __GNUC__
#   include <unistd.h> // Gibt's anscheinend bei VC nicht?!?
#endif
#include <windows.h> // das hab ich jetzt erst dazu gemacht, aber es hat sich nichts verändert :-(
#include <winsock2.h>
#include <ws2tcpip.h>
#include <lmserver.h>

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

16

25.06.2010, 10:48

Wenn du schon windows.h inkludierst brauchst du kein winsock2.h mehr.

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

17

25.06.2010, 11:14

Klasse funktioniert =) ich musste nur noch "NetAPI32.lib" und "Ws_32.lib" verlinken und schon lief's.

Jetzt kommt mein SoftwareRenderer (in reinem C) dran.

Folgende Fehlermeldung an folgender Code Stelle:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
// Fehler:
// error C2275: 'RAYcolor_t': Ungültige Verwendung dieses Typs als Ausdruck

typedef unsigned char   RAYpixel_t;
typedef int             RAYcolor_t;

/* ... */

RAYpixel_t* rayPixelBuffer;

/* ... */

RAYcolor_t olda = rayPixelBuffer[i+3]; // Hier wurder der obige Fehler fest gestellt


Muss ich hier einfach casten??

EDIT:
Bei einer anderen Variante mit "const" forne dran kommt folgender Fehler:

C-/C++-Quelltext

1
2
3
4
5
6
7
/*
Fehler:
error C2143: Syntaxfehler: Es fehlt ';' vor 'const'
error C2065: 'olda': nichtdeklarierter Bezeichner
*/

const RAYcolor_t olda = rayPixelBuffer[i+3];

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »LukasBanana« (25.06.2010, 11:23)


NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

18

25.06.2010, 11:26

der fehler liegt vermutlich in der zeile davor.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

19

25.06.2010, 15:21

Vielleicht hilft euch das hier mehr, den Fehler zu erkennen:

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
extern "C" {

#define RAYINLINE static __inline

typedef unsigned char   RAYpixel_t;
typedef int             RAYcolor_t;

/* ... */

RAYpixel_t* rayPixelBuffer = 0; // der wird natürlich noch mit "calloc" gefüllt ;-)

/* ... */

RAYINLINE void rayPlotIndexedAlphaEffect(RAYint i, const RAYfloat z, RAYcolor_t r, RAYcolor_t g, RAYcolor_t b, RAYcolor_t a)
{
    // Plot the depth
    if (z >= rayDepthBuffer[i])
    {
        rayDepthBuffer[i] = z;
        
        i <<= 2;
        rayPixelBuffer[i+0] = r * a / 255   +   rayPixelBuffer[i+0] * ( 255 - a ) / 255;
        rayPixelBuffer[i+1] = g * a / 255   +   rayPixelBuffer[i+1] * ( 255 - a ) / 255;
        rayPixelBuffer[i+2] = b * a / 255   +   rayPixelBuffer[i+2] * ( 255 - a ) / 255;
        rayPixelBuffer[i+3] = a;
    }
    else
    {
        i <<= 2;
        
        r = r * a / 255   +   rayPixelBuffer[i+0] * ( 255 - a ) / 255;
        g = g * a / 255   +   rayPixelBuffer[i+1] * ( 255 - a ) / 255;
        b = b * a / 255   +   rayPixelBuffer[i+2] * ( 255 - a ) / 255;
        
        // FEHLER HIER
        const RAYcolor_t olda = rayPixelBuffer[i+3];
        // /FEHLER HIER
        
        rayPixelBuffer[i+0] = r * ( 255 - olda ) / 255   +   rayPixelBuffer[i+0] * olda / 255;
        rayPixelBuffer[i+1] = g * ( 255 - olda ) / 255   +   rayPixelBuffer[i+1] * olda / 255;
        rayPixelBuffer[i+2] = b * ( 255 - olda ) / 255   +   rayPixelBuffer[i+2] * olda / 255;
        rayPixelBuffer[i+3] = a;
    }
}

} // /extern "C"


Die Fehler meldung lautet:

C-/C++-Quelltext

1
2
error C2143: Syntaxfehler: Es fehlt ';' vor 'const'
error C2065: 'olda': nichtdeklarierter Bezeichner

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

20

25.06.2010, 15:25

edit: arbeitest du vllt mit irgendwelchen makros? da ist kein fehler oO
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »NachoMan« (25.06.2010, 15:33)


Werbeanzeige