C++ -kysymykset
Re: C++ -kysymykset
system("pause");
Tuo pysäyttää sen joten se ei katoa siitä.
Pelilä<- yksi ylläpitämäni sivusto.
World leaders Ensimmäinen CoolBasic projektini
-
- Active Member
- Posts: 248
- Joined: Mon Aug 27, 2007 9:23 pm
- Location: Oulu
Re: C++ -kysymykset
-
- Active Member
- Posts: 111
- Joined: Fri Jun 13, 2008 9:06 pm
Re: C++ -kysymykset
Code: Select all
[Linker error] undefined reference to `WinMain@16'
ld returned 1 exit status
C:\Dev-Cpp\MinChat\Makefile.win [Build Error] [MinChat.exe] Error 1
Re: C++ -kysymykset
-
- Active Member
- Posts: 111
- Joined: Fri Jun 13, 2008 9:06 pm
Re: C++ -kysymykset
PS: Ohjelma toimii, kun poistan include <SDL/SDL.h> kutsun ja koodissa ei ole tämän lisäksi kuin minimaalinen main osio:
Code: Select all
int main(int argc, char *argv[]) {
return 1;
}
Noniin ongelmassa päästy eteenpäin, eli luin muutaman ohjeen netistä ja sain seuraavanlaisen sähellyksen:
-lmingw32
-lSDL
-lSDLmain
-mwindows
ja ny virhekoodi on seuraava:
Code: Select all
C:\Dev-Cpp\lib\libSDLmain.a(SDL_win32_main.o)(.text+0x2ec) In function `console_main':
[Linker error] undefined reference to `SDL_strlcpy'
[Linker error] undefined reference to `SDL_Init'
[Linker error] undefined reference to `SDL_GetError'
[Linker error] undefined reference to `SDL_SetModuleHandle'
[Linker error] undefined reference to `SDL_main'
C:\Dev-Cpp\lib\libSDLmain.a(SDL_win32_main.o)(.text+0x42b) In function `WinMain':
[Linker error] undefined reference to `SDL_strlcpy'
[Linker error] undefined reference to `SDL_strlcat'
[Linker error] undefined reference to `SDL_strlcpy'
[Linker error] undefined reference to `SDL_strlcat'
[Linker error] undefined reference to `SDL_strlcpy'
C:\Dev-Cpp\lib\libSDLmain.a(SDL_win32_main.o)(.text+0x195) In function `cleanup':
[Linker error] undefined reference to `SDL_Quit'
C:\Dev-Cpp\lib\libSDLmain.a(SDL_win32_main.o)(.text+0x195) ld returned 1 exit status
- Sami The Great
- Advanced Member
- Posts: 485
- Joined: Tue Aug 28, 2007 4:15 pm
- Contact:
Re: C++ -kysymykset
Epäilen, että et ole linkittänyt headereita. Eli laita se include takaisin sinne koodiin. Ja main funktion tulisi palauttaa 0, jos suoritus onnistui eikä 1.lukutoukka wrote:Ei auttanut tuo lisäys
PS: Ohjelma toimii, kun poistan include <SDL/SDL.h> kutsun ja koodissa ei ole tämän lisäksi kuin minimaalinen main osio:
Code: Select all
int main(int argc, char *argv[]) { return 1; }
EDIT:Noniin ongelmassa päästy eteenpäin, eli luin muutaman ohjeen netistä ja sain seuraavanlaisen sähellyksen:
-lmingw32
-lSDL
-lSDLmain
-mwindows
ja ny virhekoodi on seuraava:[/edit]Code: Select all
C:\Dev-Cpp\lib\libSDLmain.a(SDL_win32_main.o)(.text+0x2ec) In function `console_main': [Linker error] undefined reference to `SDL_strlcpy' [Linker error] undefined reference to `SDL_Init' [Linker error] undefined reference to `SDL_GetError' [Linker error] undefined reference to `SDL_SetModuleHandle' [Linker error] undefined reference to `SDL_main' C:\Dev-Cpp\lib\libSDLmain.a(SDL_win32_main.o)(.text+0x42b) In function `WinMain': [Linker error] undefined reference to `SDL_strlcpy' [Linker error] undefined reference to `SDL_strlcat' [Linker error] undefined reference to `SDL_strlcpy' [Linker error] undefined reference to `SDL_strlcat' [Linker error] undefined reference to `SDL_strlcpy' C:\Dev-Cpp\lib\libSDLmain.a(SDL_win32_main.o)(.text+0x195) In function `cleanup': [Linker error] undefined reference to `SDL_Quit' C:\Dev-Cpp\lib\libSDLmain.a(SDL_win32_main.o)(.text+0x195) ld returned 1 exit status
CoolBasickin käyttäjä vuodesta 2004.
-
- Active Member
- Posts: 111
- Joined: Fri Jun 13, 2008 9:06 pm
Re: C++ -kysymykset
- Sami The Great
- Advanced Member
- Posts: 485
- Joined: Tue Aug 28, 2007 4:15 pm
- Contact:
Re: C++ -kysymykset
Muttä eihän SDL toimi ilman sen header filuja. Eli tuon SDL.h:n includettaminen on välttämätöntä, jos haluat SDL:ää käyttää. Mitä virhe sanomaa kääntäjä antaa, jos yrität includettaa SDL.h:ta?lukutoukka wrote:noniin, tuossa ohjelmassa on nyt return 0 ja include <SDL/SDL.h> ja edelleenkin ilman tuota <SDL/SDL.h> tuo toimii oikein, eli miten tämän saisi korjattua?
CoolBasickin käyttäjä vuodesta 2004.
-
- Active Member
- Posts: 111
- Joined: Fri Jun 13, 2008 9:06 pm
Re: C++ -kysymykset
ONGELMA RAKTAISTU!
Syynä oli lippujen väärä järjestys, eli -lSDLmain ennen -lSDL:ää.
Re: C++ -kysymykset
Code: Select all
#include <iostream>
using namespace std;
int *PalautaPointer(int p)
{
return &p;
}
int main(void)
{
int Lukema = 39;
int * pLukema = PalautaPointer(Lukema);
cout << *pLukema << endl;
system("PAUSE");
return EXIT_SUCCESS;
}
-
- Forum Veteran
- Posts: 2396
- Joined: Tue Aug 28, 2007 4:20 pm
Re: C++ -kysymykset
Code: Select all
#include <iostream>
using namespace std;
int *PalautaPointer(int &p)
{
return (int*)p;
}
int main(void)
{
int Lukema = 39;
int * pLukema = PalautaPointer(Lukema);
cout << (int)pLukema << endl;
}
Re: C++ -kysymykset
Code: Select all
cout << (int)pLukema << endl; -> cout << pLukema << endl;
=> Tulostaa taas melkeinpä mitä sattuun.
cout << (int)pLukema << endl; -> cout << *pLukema << endl;
=> Ohjelma kaatuu.
-
- Forum Veteran
- Posts: 2396
- Joined: Tue Aug 28, 2007 4:20 pm
Re: C++ -kysymykset
Code: Select all
cout << pLukema << endl;
Re: C++ -kysymykset
http://www.cplusplus.com/doc/tutorial/pointers/
Tuollaisen löysin, luulen että tuo auttaa enemmän. Mut kiitos kuitenkin yrityksestä
-
- Active Member
- Posts: 248
- Joined: Mon Aug 27, 2007 9:23 pm
- Location: Oulu
Re: C++ -kysymykset
Code: Select all
MyObject* createObject(const string& tag)
{
// Palautetaan juuri luodun olion osoite
return new MyObject( tag, ", no changes made" );
}
Code: Select all
void printObject( const MyObject& object )
{
// Täällä object-oliota voi vain tarkastella, ei muokata. Täällä kutsuttavien MyObjectin metodien tulee päättyä const-sanaan! Kts. tag() alempana.
cout << object.tag() << endl;
}
Code: Select all
void changeTag( MyObject& object, const string& newTag )
{
// Täällä tehdyt muutokset näkyvät myös viitattavassa oliossa
object.setTag( newTag );
}
Code: Select all
void reallocateObject( MyObject*& pointer )
{
// Ennenkuin osoittimeen laitetaan tavaraa, on hyvä varmistaa ettei muisti vuoda
delete pointer;
pointer = NULL;
// Luodaan uusi olio
pointer = createObject("reallocated object");
}
Tietenkin osoittimia tulee käyttää silloin kun täytyy (esim. API:t jotka vaativat osoittimia, tai kun muokataan taulukoita tai esimerkiksi kuvapuskureja), mutta se ei nyt kuulu tähän. Tässä vielä kääntyvä esimerkki noista äskeisestä:
Code: Select all
#include <iostream>
#include <string>
using namespace std;
class MyObject
{
public:
MyObject(const string& tag, const string& somethingElse)
{
m_tag = tag + somethingElse;
}
void setTag(const string& newTag)
{
m_tag = newTag;
}
// Tämä on const-loppuinen, koska se ei muuta oliota sisäisesti
const string& tag() const
{
return m_tag;
}
private:
string m_tag;
};
MyObject* createObject(const string& tag);
void printObject( const MyObject& object );
void changeTag( MyObject& object, const string& newTag );
void reallocateObject( MyObject*& pointer );
int main(const int&)
{
// Luodaan uusi olio ja tulostetaan
MyObject* myObject = createObject("tadaa");
printObject( *myObject );
// Muutetaan sen tilaa
changeTag( *myObject, "let's change the state, shall we?" );
printObject( *myObject );
// Luodaan uusi olio entisen "tilalle"
reallocateObject( myObject );
printObject( *myObject );
return 0;
}
MyObject* createObject(const string& tag)
{
// Palautetaan juuri luodun olion osoite
return new MyObject( tag, ", no changes made" );
}
void printObject( const MyObject& object )
{
// Täällä object-oliota voi vain tarkastella, ei muokata. Täällä kutsuttavien MyObjectin metodien tulee päättyä const-sanaan! Kts. tag() alempana.
cout << object.tag() << endl;
}
void changeTag( MyObject& object, const string& newTag )
{
// Täällä tehdyt muutokset näkyvät myös viitattavassa oliossa
object.setTag( newTag );
}
void reallocateObject( MyObject*& pointer )
{
// Ennenkuin osoittimeen laitetaan tavaraa, on hyvä varmistaa ettei muisti vuoda
delete pointer;
pointer = NULL;
// Luodaan uusi olio
pointer = createObject("reallocated object");
}
-
- Active Member
- Posts: 111
- Joined: Fri Jun 13, 2008 9:06 pm
Re: C++ -kysymykset
Code: Select all
#include <cstdlib>
#include <cstdio>
#ifdef __APPLE__
#include <SDL/SDL.h>
#else
#include <SDL.h>
#endif
#include <string>
//FUNKTIOT
// Erittäin alkeellinen kuvien piirtämiseen tarkoitettu funktio
void PiirraKuva(SDL_Surface *kuva, SDL_Surface *naytto, int x, int y)
{
SDL_Rect alue; // mille alueellä näyttöä kuva piirretään
alue.x = x; // koordinaatit
alue.y = y;
SDL_BlitSurface(kuva, NULL, naytto, &alue); // piirto
}
// Pelikentän tiedot sisältävä olio
class Huone
{
private:
unsigned int sx; // Huoneeseen tultaessa sisäänkäynti ja uloskäynti
unsigned int sy;
unsigned int kentta [50][50]; //Kentän koko
public:
Huone(int x, int y);
~Huone();
int Nayta(unsigned int x, unsigned int y);
};
Huone::Huone (int x, int y)
{
sx = x; // Sisäänkäynnin koordinaatit asetetaan oikeiksi
sy = y;
for (int x = 0; x < 50; x++) //Alustetaan taulukko
{
for (int y = 0; y < 50; y++)
{
kentta[x][y] = 0; // Laitetaan kentän tiedot 0, joka tarkoittaa tyhjää maastoa
}
}
}
Huone::~Huone()
{
;
}
int Huone::Nayta(unsigned int x, unsigned int y)
{
return 0;
}
// Pelaajan tiedot säilövä olio
class Hahmo
{
private:
unsigned int x; // Pelaajan koordinaatit
unsigned int y;
unsigned int alue; //Millä alueella pelaaja on
public:
Hahmo();
~Hahmo();
void Liiku(int suunta); // Liikutetaan pelaajaa
void NaytaYmparisto(Huone& Kentta, SDL_Surface* ruohikko, SDL_Surface* Naytto); // Pelaajan ympäristö näkyviin
void AsetaPaikka(int ux, int uy); //Pelaajalle asetetaan joku paikka
};
Hahmo::Hahmo()
{
x = 0;
y = 0;
alue = 0;
}
Hahmo::~Hahmo()
{
;
}
void Hahmo::AsetaPaikka(int ux, int uy)
{
x = ux;
y = uy;
}
void Hahmo::NaytaYmparisto(Huone& Kentta, SDL_Surface *ruohikko, SDL_Surface *naytto)
{
for (unsigned int ax = 0; ax < 50; ax++) //Tarkastetaan, että ollaanko tarpeeksi lähellä piirtääksemme karttaan
{
if (ax > x - 10 and ax < x + 10)
{
for (unsigned int ay = 0; ay < 50; ay++)
{
if (ay > y - 10 and ay < y + 10)
{
if (Kentta.Nayta(ax, ay) == 0)
{
PiirraKuva(ruohikko, naytto, ((ax-x)*25)+((ay-y)*(-25)), ((ax-x)*25)+((ay-y)*25));
}
}
}
}
}
}
//PÄÄFUNKTIO
int main ( int argc, char** argv )
{
// initialize SDL video
if ( SDL_Init( SDL_INIT_EVERYTHING ) < 0 )
{
printf( "SDL:n alustus epäonnistui: %s\n", SDL_GetError() );
return 1;
}
// Varmistaa, että SDL suljetaan ennen lopettamista
atexit(SDL_Quit);
// Luodaan näyttö x, y, värisyys
SDL_Surface* naytto = SDL_SetVideoMode(640, 480, 32,
SDL_HWSURFACE|SDL_DOUBLEBUF);
if ( !naytto )
{
printf("Näyttösi ei tue 640, 280, 32 näyttötilaa: %s\n", SDL_GetError());
return 1;
}
// Ladataan kuvat
SDL_Surface* ruohikko = SDL_LoadBMP("Kuvat/ruoho.bmp");
SDL_SetColorKey(ruohikko, SDL_SRCCOLORKEY, SDL_MapRGB(ruohikko->format,255,0,255));
SDL_Surface* hahmo = SDL_LoadBMP("Kuvat/hahmo.bmp");
SDL_SetColorKey(hahmo, SDL_SRCCOLORKEY, SDL_MapRGB(hahmo->format,255,0,255));
//Luodaan Pelaaja, sekä kartta
Hahmo Pelaaja; // Luodaan pelaaja
Huone Kentta(0,0); // Luodaan testikenttä
// PÄÄSILMUKKA
bool done = false;
while (!done)
{
// Syötteiden tarkistus
SDL_Event event;
while (SDL_PollEvent(&event))
{
// Tarkistetaan syötteen tyyppi
switch (event.type)
{
// Sulkemisnäppäimestä sulkeminen
case SDL_QUIT:
done = true;
break;
// Varsinainen näppäintentarkistus
case SDL_KEYDOWN:
{
// Jos painetaan esc:iä, niin suljetaan
if (event.key.keysym.sym == SDLK_ESCAPE)
done = true;
break;
}
} // Lopetetaan syötteiden tarkistus
} // Lopetetaan syötteiden luku
// PIIRTÄMINEN ALKAA TÄSTÄ
// Puhdistetaan ruutu
SDL_FillRect(naytto, 0, SDL_MapRGB(naytto->format, 0, 0, 0));
Pelaaja.NaytaYmparisto(Kentta,ruohikko,naytto);
// PIIRTÄMINEN LOPPUU TÄSSÄ
// Näytölle piirtäminen
SDL_Flip(naytto);
} // PÄÄSILMUKKA LOPPUU
// Vapautetaan kuvien käyttämä muisti
SDL_FreeSurface(ruohikko);
SDL_FreeSurface(hahmo);
// Tulostetaan kaiken onnistuneen oikein
printf("Ohjelma suljettiin onnistuneesti\n");
return 0;
}
-
- Active Member
- Posts: 248
- Joined: Mon Aug 27, 2007 9:23 pm
- Location: Oulu
-
- Active Member
- Posts: 111
- Joined: Fri Jun 13, 2008 9:06 pm
Re: C++ -kysymykset
Re: C++ -kysymykset
- Sami The Great
- Advanced Member
- Posts: 485
- Joined: Tue Aug 28, 2007 4:15 pm
- Contact:
Re: C++ -kysymykset
Se ei ole vaikeaa jos tätä mietit:zHelmet wrote:Olisiko jollain jotain linkkiä johonkin yksinkertaiseen oppaaseen (suomeksi) jossa opetetaan yhdistämään luokan sisään structuri??
Code: Select all
struct PelaajanKoordinaatit
{
float x;
float y;
float z;
};
class Pelaaja
{
private:
PelaajanKoordinaatit koordinaatit;
};
CoolBasickin käyttäjä vuodesta 2004.