Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: SDL ei toimi

Sivun loppuun

Touho [24.07.2004 22:39:49]

#

Eikkä. tätä ohjetta olen käyttänyt:
http://pgdc.purdue.org/sdltutorial/sdl_setup.html

Ja tämmönen pätkä sanottu:
#ifdef WIN32
#pragma comment(lib, "SDL.lib")
#pragma comment(lib, "SDLmain.lib")
#endif

#include "SDL.h"

int main(int argc, char **argv)
{

printf("\nHello SDL User!\n");

/* initialize SDL */
if ( SDL_Init( SDL_INIT_VIDEO ) < 0 )
{
fprintf( stderr, "Video initialization failed: %s\n",
SDL_GetError( ) );
SDL_Quit( );
}

SDL_Quit( );

return 0;
}

Kun yritän kääntää, Visual C++ valittaa:
--------------------Configuration: Dos - Win32 Debug--------------------
Linking...
msvcrt.lib(MSVCRT.dll) : error LNK2005: _exit already defined in LIBCD.lib(crt0dat.obj)
msvcrt.lib(MSVCRT.dll) : error LNK2005: _strncpy already defined in LIBCD.lib(strncpy.obj)
msvcrt.lib(MSVCRT.dll) : error LNK2005: _fprintf already defined in LIBCD.lib(fprintf.obj)
msvcrt.lib(MSVCRT.dll) : error LNK2005: _fclose already defined in LIBCD.lib(fclose.obj)
msvcrt.lib(MSVCRT.dll) : error LNK2005: __isctype already defined in LIBCD.lib(isctype.obj)
LIBCD.lib(crt0init.obj) : warning LNK4098: defaultlib "msvcrt.lib" conflicts with use of other libs; use /NODEFAULTLIB:library
Debug/Dos.exe : fatal error LNK1169: one or more multiply defined symbols found
Error executing link.exe.

Dos.exe - 6 error(s), 1 warning(s)

Kun en ole V C++:lla enkä SDL juurikaan tehnyt, en osaa sanoa tuohon mitään..

Metabolix [24.07.2004 23:48:10]

#

Et voinut käyttää kooditageja ?
Luepa se ohjeesi vielä rivi riviltä uudestaan.
Tällainen kohta sieltä löytyy:

Ohje kirjoitti:

Right-click on the name of your project in the Solution explorer and select "Properties". - - Select the "code Generation" on the left. On the right, select the "Runtime Library" pull down menu and choose Multi-Threaded DLL or Multi-Threaded Debug DLL if you wish to use debugging. Hit OK.

Touho [25.07.2004 12:41:18]

#

Nyt se valittaa: "SDL.dll not found". Olen laittanut sen filun näkyviin VC++:lle, mutta ei auta.

Gaxx [25.07.2004 12:47:20]

#

Laita nyt hyvä mies se SDL.dll siihen kansioon missä se (oman) ohjelmasi exe on!

Edit: Tällälailla siellä ohjeessakin lukee:

lainaus:

You need to copy the SDL.dll file from the lib directory (C:\LIB_SDL\SDL-1.2.5\lib) to your Debug directory where your freshly bulit executable now lays (c:\SDL_Test\SDL_Test\Debug) so the program may run.

Edit2: Kylläs se ohje kannattaa lukea kunnolla :)

Touho [25.07.2004 18:30:05]

#

Nyt oon saanut pari tutorialin pätkää toimimaan, mutta putkalaisten esimerkissä valittaa esim:

warning C4244: '=' : conversion from 'double' to 'float', possible loss of data
warning C4244: '=' : conversion from 'float' to 'int', possible loss of data

Tuommosia tulee kymmänittäin

Metabolix [25.07.2004 20:07:54]

#

warning = varoitus
Mitäpä jos opettelisit englantia ja miettisit mitä tuo virhe tarkoittaa. Sitten voit katsoa, mitä eroa on tyypeillä double ja float. Olisitko niin kiltti, että yrittäisit edes hieman ajatella itse ennen kuin kysyt täällä? Vai etkö tosiaan ymmärrä tuollaisia asioita vaikkapa valmiiden oppaiden avulla?

Edit: Autetaanpa nyt vielä vähän.
conversion from 'float' to 'int', possible loss of data
= muunnos tyypistä float tyyppiin int, mahdollinen tietojen menetys
Tarkoittaa käytännössä, että koska float on desimaaliluku ja int kokonaisluku, joudutaan tuossa jättämään luvun desimaaliosa pois.

conversion from 'double' to 'float', possible loss of data
= muunnos tyypistä double tyyppiin float, mahdollinen tietojen menetys
Tarkoittaa käytännössä, että koska float on tarkkuudeltaan pienempi kuin double, saattaa luvun tarkkuus pienentyä muunnoksessa.

Touho [26.07.2004 15:29:19]

#

Kyllähän minä englantia osaan, mutta lähinnä en osaa käyttää vielä kunnolla VC++:ssaa.

En tiedä, miten saan VC++:n yksinkertaisesti hyväksymään tietojen menetystä, vai voiko sitä tehdä ollenkaan.

Olen iloinen, että olette näinin kauan opastanut :)

thefox [26.07.2004 21:15:31]

#

Typekastaat sen luvun vaan esim. juuri flotariksi -- eli kerrot kääntäjälle että tiedät kyllä että double on floattia tarkempi -- tähän tyyliin:

float a;
double b = 45.3f;

a = (float)b;

EDIT:
Jos lähdekoodissa on yksinkertaisesti esimerkiksi "a = 45.7" (missä a on float) niin voit kertoa kääntäjälle että 45.7 on float-tyyppinen myös lisäämällä perään f:n, eli "45.7f".

Metabolix [26.07.2004 21:27:49]

#

Toinen vaihtoehto on vain lisätä koodin alkuun seuraava:

#pragma warning(disable: 4244)

Tämä ilmoittaa kääntäjälle, että virheestä ei tarvitse huomauttaa. Huono puoli on, että jos tekeekin oikeasti virheen, niin kääntäjä ei varoita siitä. (4244 on siis kyseisen virheen numero VC++:ssa)

Edit: sori tuo edellinen viesti


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta