Inlägg

Inlägg som Gego har skrivit i forumet
Av Gego
Skrivet av veggie_d:

Testat att byta obj2->getX() till obj2.getX()?

Kan inte använda "." på en pekare... g++ vill inte äns ha det.

skall sätta lite break points i koden för att se om det kan hjälpa mig att hitta felet.

Av Gego
Skrivet av MagnusL:

Använd en debugger och stega igenom programmet.

Jag använde GDB för att komma fram till att jag får en 0x0 referens...

Av Gego
Skrivet av Elgot:

funktionen väntar sig en pekare och om player definieras som ovan bör det inte vara någon stjärna där. Vad objectFromVector innehåller framgår inte vad jag kan se, men om det är en pekarpekare verkar det bra med en stjärna; annars inte (kompilatorn brukar dock vara bra på att märka när man gör konstigt, och det verkar ju inte vara där problemet finns).

Kraschen uppstår alltså någonstans i getX()? Kan man, när player initieras, köra både
player->getX();
och
((gameObjects*)player)->getX();
?

Ja båda fungerar.... men inte I hjälpar klassen...

Kanske skall posta hjälpar klassen?

Kanse är något fel på Gold Länkaren?

Av Gego

oh just det... det har jag i koden..

itteratorHelper((*ObjectFromVector) , player) skall det juh vara...

med om jag lägger till en stjärna på player får jag:
ingen känd konvertering för argument 2 från "gameObjects" till "gameObjects*"

/me rages

EDIT:
ja det var det
obj2 pekar på 0x0
EDIT2:
eller inte obj2 i sig utan obj2->getX()

Av Gego

[C++] [pekare] Får segmenterings fel.

Hej, jag igen...

I alla fall:
Jag har ett litet problem:
när jag försöker ge en funktion en pekare till ett spel objekt kan jag använda det i den funktionen, men när jag försöker skicka objektet vidare till en annan funktion från den funktionen så får jag och försöker använda det objektets funktioner (typ player->getX() ) så får jag segmenterings fel på grund av att jag får en referens till 0x0 (noll adressen, dvs ingen tingen).

vad kan det här bero på?

(Vet inte hur det är med att få utomstående hjälp när man går på högskola, så jag vågar inte riktigt lägga upp min kod).

men säg att vi har fyra klasser: game, logic, objectPlayer och gameObjects. (objectPlayer ärver från gameObjects)
I game har jag en pekare till en objectPlayer*.
I logic har jag två funktioner: itterateObjects(objectPlayer player*):void som ittererar igenom en vector med gameObjects och jämför med player, samt itteratorHelper(gameObjects obj1*,gameObjects obj2* ):boolean .

I game (som körs när man startar spelet) så körs:

objectPlayer *player = new objectPlayer(); logic Logic = new logic(); //skapar en instans av klassen logic Logic.itterateObjects(player);

i itterateObjects():

<kod som ittererar genom en vector> if(itteratorHelper(ObjectFromVector , player){ printf("the value is true! \n"); }

itteratorHelper:

if(obj1->getX() < obj2->getX()){ return true; } else { return false; }

Det är i jämförelsen här som allt går åt hellvete... jag får en noll pekare från obj2 (dvs den som pekar på player)...
men kör jag samma jämförelse i itterateObjects() så får jag inte det.

What gives?
[/code]

Av Gego

* en databas som innehåller kända adresser som har sammlats in via ett nät trålnings script.
* Sendmail eller nyligt
* ett script som binder detta samman
** dvs: läser databasen, skriver mailet till en fil enligt mail standarden, bet sendmail att skicka iväd filen, ta bort filen, bärja om...

Det här är inte något som jag har gjort, men vet man om nät trålning så är det inte ett långt hopp till att skapa en spam bot.

Av Gego

om det fungerar så fungerar det, kan även starta spelet som spottas ut..

Av Gego
Skrivet av Elgot:

Det verkar ju uppenbarligen inte fungera (och det verkar typiskt vara lSDL som saknas (och att det bara skulle fungera med binutils-gold låter osannolikt)).

Men det fungerar och det är så som jag alltid har skrivit...

Kolla tutorials:
http://gamedevgeek.com/tutorials/getting-started-with-sdl/
Kolla under titeln "Compiling"

Av Gego
Skrivet av Elgot:

Nja, den verkar inte expandera uttrycken ordentligt:

g++ -W -Wall -o0 -g `sdl-config --cflags --libs` -lSDL_image -lSDL_ttf -c src/main.cpp -o obj/main.o

Har du arbetat med Makefiles förut?

make bara echo:ar ut bet som står i skriptet...

och det tas sedan hand om någon form av shell. Skulle tro att GCC har någon sådan funktion.

Av Gego
Skrivet av Elgot:

Menar du att ovanstående inte fungerar (eller i alla fall förbättrar situationen), att binutils-gold fungerar eller båda?

Nu Kan jag skriva make och det bygger projektet..

dvs: nu fungerar det...

och att något är fel med GNU Linker (skulle jag tro) för Gold Linker ändras till standard ld (byter ut sig mot GNU Linker).

(Svenska bra idag?)

Av Gego
Skrivet av Elgot:

Du länkar mot SDL_image och SDL_ttf; finns det inte en SDL också?

det är det som

`sdl-comfig --cflags --libs`

är till för...

det blir nämligen:

-I/usr/include/SDL -D_GNU_SOURCE=1 -D_REENTRANT -L/usr/lib -lSDL

Av Gego
Skrivet av trappski:

Jo. Skulle säga att SDLFLAGS bör ändras från:

SDLFLAGS=`sdl-config --cflags --libs` -lSDL_image -lSDL_ttf

till:
SDLFLAGS=`sdl-config --cflags --libs` -lSDLMAin -lSDL -lSDL_image -lSDL_ttf

Notera de fetmarkerade tillägen.
Tror ev. att SDLMain bara behövs för windows. Inte helt säker. Ett tag sedan jag pillade med C/C++ nu.

Nej, felet var att jag behövde binutils-gold för att kompilera skiten... IE: något fel med GNU Linker..

Av Gego

Jag reverterade tillbaka några commits i koden och samma problem....

och inget skillnad...

kolla filerna som jag postade i buggrappporten.

Av Gego

har nu testat med ett simpelt program....

det värkar vara så att det inte äns fungerar då..

Har skrivigt en bugg rapport till libSDL:
https://bugs.launchpad.net/ubuntu/+source/libsdl1.2/+bug/8766...

så något är fel med GNU ld .... alt. libSDL..

men jag kan spela SDL spel...

EDIT:
Dessutom så var det innan jag uppgraderade...

Av Gego

[ld][g++][make] Kan inte länka in SDL...

EDIT2: Visade sig att det förmodliget var GNU Linker som var boven, Instalerade Gold Linker (binutils-gold) och allt blev så bra..

EDIT: kom precis hem och där är samma på den stationära...

Hej jag har lite problem med att kompilera min kod, jag har kontrollerat att jag har alla libsdl paket och libsdl-*-dev paket som är relevanta.

har kollat att biblioteken är på rätt plats också...

detta problem började uppstå när jag uppgraderade till Ubuntu 11.10 på lapptopen, dock tror jag att det fungerar på min stationära med samma OS och bibliotek...

har även installerat om SDL bibliotek 5-6 ggr... no luck...

$ make g++ -W -Wall -o0 -g `sdl-config --cflags --libs` -lSDL_image -lSDL_ttf -c src/main.cpp -o obj/main.o g++ -W -Wall -o0 -g `sdl-config --cflags --libs` -lSDL_image -lSDL_ttf -c src/SDLWrapper.cpp -o obj/SDLWrapper.o src/SDLWrapper.cpp:82:3: varning: flerradskommentar [-Wcomment] src/SDLWrapper.cpp: I medlemsfunktion "void SDLWrapper::mainLoop()": src/SDLWrapper.cpp:103:8: varning: oanvänd variabel "eChar" [-Wunused-variable] g++ -W -Wall -o0 -g `sdl-config --cflags --libs` -lSDL_image -lSDL_ttf -c src/gameLogic.cpp -o obj/gameLogic.o src/gameLogic.cpp:32:6: varning: oanvänd parameter "invader" [-Wunused-parameter] src/gameLogic.cpp:66:6: varning: oanvänd parameter "player" [-Wunused-parameter] g++ -W -Wall -o0 -g `sdl-config --cflags --libs` -lSDL_image -lSDL_ttf -c src/gameObjects.cpp -o obj/gameObjects.o g++ -W -Wall -o0 -g `sdl-config --cflags --libs` -lSDL_image -lSDL_ttf -c src/gameObjectProjectile.cpp -o obj/gameObjectProjectile.o g++ -W -Wall -o0 -g `sdl-config --cflags --libs` -lSDL_image -lSDL_ttf -c src/gameObjectPlayer.cpp -o obj/gameObjectPlayer.o g++ -W -Wall -o0 -g `sdl-config --cflags --libs` -lSDL_image -lSDL_ttf -c src/gameObjectInvader.cpp -o obj/gameObjectInvader.o g++ -W -Wall -o0 -g `sdl-config --cflags --libs` -lSDL_image -lSDL_ttf -c src/gameObjectExplotion.cpp -o obj/gameObjectExplotion.o ar rs obj/gameObjects.a obj/gameObjects.o obj/gameObjectProjectile.o obj/gameObjectPlayer.o obj/gameObjectInvader.o obj/gameObjectExplotion.o ar: creating obj/gameObjects.a g++ -W -Wall -o0 -g `sdl-config --cflags --libs` -lSDL_image -lSDL_ttf obj/main.o obj/SDLWrapper.o obj/gameLogic.o obj/gameObjects.a -o bin/invaders obj/SDLWrapper.o: In function `SDLWrapper::convertImage(SDL_Surface*)': /home/dev/bzr/invaders-sdl/src/SDLWrapper.cpp:24: undefined reference to `SDL_DisplayFormatAlpha' obj/SDLWrapper.o: In function `SDLWrapper': /home/dev/bzr/invaders-sdl/src/SDLWrapper.cpp:42: undefined reference to `SDL_Init' /home/dev/bzr/invaders-sdl/src/SDLWrapper.cpp:43: undefined reference to `TTF_Init' /home/dev/bzr/invaders-sdl/src/SDLWrapper.cpp:45: undefined reference to `TTF_OpenFont' /home/dev/bzr/invaders-sdl/src/SDLWrapper.cpp:47: undefined reference to `SDL_SetVideoMode' /home/dev/bzr/invaders-sdl/src/SDLWrapper.cpp:53: undefined reference to `TTF_RenderText_Solid' /home/dev/bzr/invaders-sdl/src/SDLWrapper.cpp:57: undefined reference to `IMG_Load' /home/dev/bzr/invaders-sdl/src/SDLWrapper.cpp:60: undefined reference to `IMG_Load' /home/dev/bzr/invaders-sdl/src/SDLWrapper.cpp:63: undefined reference to `IMG_Load' /home/dev/bzr/invaders-sdl/src/SDLWrapper.cpp:66: undefined reference to `IMG_Load' /home/dev/bzr/invaders-sdl/src/SDLWrapper.cpp:69: undefined reference to `SDL_FreeSurface' obj/SDLWrapper.o: In function `~SDLWrapper': /home/dev/bzr/invaders-sdl/src/SDLWrapper.cpp:84: undefined reference to `SDL_FreeSurface' /home/dev/bzr/invaders-sdl/src/SDLWrapper.cpp:85: undefined reference to `SDL_FreeSurface' /home/dev/bzr/invaders-sdl/src/SDLWrapper.cpp:86: undefined reference to `SDL_FreeSurface' /home/dev/bzr/invaders-sdl/src/SDLWrapper.cpp:87: undefined reference to `SDL_FreeSurface' obj/SDLWrapper.o:/home/dev/bzr/invaders-sdl/src/SDLWrapper.cpp:88: more undefined references to `SDL_FreeSurface' follow obj/SDLWrapper.o: In function `~SDLWrapper': /home/dev/bzr/invaders-sdl/src/SDLWrapper.cpp:90: undefined reference to `TTF_CloseFont' /home/dev/bzr/invaders-sdl/src/SDLWrapper.cpp:91: undefined reference to `TTF_Quit' /home/dev/bzr/invaders-sdl/src/SDLWrapper.cpp:92: undefined reference to `SDL_Quit' obj/SDLWrapper.o: In function `SDLWrapper::mainLoop()': /home/dev/bzr/invaders-sdl/src/SDLWrapper.cpp:111: undefined reference to `SDL_GetTicks' /home/dev/bzr/invaders-sdl/src/SDLWrapper.cpp:113: undefined reference to `SDL_PollEvent' /home/dev/bzr/invaders-sdl/src/SDLWrapper.cpp:215: undefined reference to `SDL_Flip' /home/dev/bzr/invaders-sdl/src/SDLWrapper.cpp:216: undefined reference to `SDL_FillRect' /home/dev/bzr/invaders-sdl/src/SDLWrapper.cpp:218: undefined reference to `SDL_GetTicks' /home/dev/bzr/invaders-sdl/src/SDLWrapper.cpp:219: undefined reference to `SDL_GetTicks' /home/dev/bzr/invaders-sdl/src/SDLWrapper.cpp:219: undefined reference to `SDL_Delay' obj/gameObjects.a(gameObjectPlayer.o): In function `gameObjectPlayer': /home/dev/bzr/invaders-sdl/src/gameObjectPlayer.cpp:28: undefined reference to `SDL_GetTicks' obj/gameObjects.a(gameObjectPlayer.o): In function `gameObjectPlayer::draw(SDL_Surface*)': /home/dev/bzr/invaders-sdl/src/gameObjectPlayer.cpp:57: undefined reference to `SDL_UpperBlit' obj/gameObjects.a(gameObjectPlayer.o): In function `gameObjectPlayer::shoot()': /home/dev/bzr/invaders-sdl/src/gameObjectPlayer.cpp:71: undefined reference to `SDL_GetTicks' /home/dev/bzr/invaders-sdl/src/gameObjectPlayer.cpp:73: undefined reference to `SDL_GetTicks' collect2: ld returnerade avslutningsstatus 1 make: *** [default] Fel 1

Makefile:

CXX=g++ BINARY=bin/invaders CXXFLAGS=-W -Wall -o0 -g SDLFLAGS=`sdl-config --cflags --libs` -lSDL_image -lSDL_ttf default: obj/main.o obj/SDLWrapper.o obj/gameLogic.o obj/gameObjects.a $(CXX) $(CXXFLAGS) $(SDLFLAGS) $^ -o $(BINARY) ############# CREATING OBJECT FILES #### obj/main.o: src/main.cpp $(CXX) $(CXXFLAGS) $(SDLFLAGS) -c $^ -o $@ obj/SDLWrapper.o: src/SDLWrapper.cpp $(CXX) $(CXXFLAGS) $(SDLFLAGS) -c $^ -o $@ obj/gameLogic.o: src/gameLogic.cpp $(CXX) $(CXXFLAGS) $(SDLFLAGS) -c $^ -o $@ ## need to create an archive... stupid shit.. obj/gameObjects.a: obj/gameObjects.o obj/gameObjectProjectile.o \ obj/gameObjectPlayer.o obj/gameObjectInvader.o obj/gameObjectExplotion.o ar rs obj/gameObjects.a $^ ## Files te create archive. obj/gameObjects.o: src/gameObjects.cpp $(CXX) $(CXXFLAGS) $(SDLFLAGS) -c $^ -o $@ obj/gameObjectProjectile.o: src/gameObjectProjectile.cpp $(CXX) $(CXXFLAGS) $(SDLFLAGS) -c $^ -o $@ obj/gameObjectPlayer.o: src/gameObjectPlayer.cpp $(CXX) $(CXXFLAGS) $(SDLFLAGS) -c $^ -o $@ obj/gameObjectInvader.o: src/gameObjectInvader.cpp $(CXX) $(CXXFLAGS) $(SDLFLAGS) -c $^ -o $@ obj/gameObjectExplotion.o: src/gameObjectExplotion.cpp $(CXX) $(CXXFLAGS) $(SDLFLAGS) -c $^ -o $@ ############# TEST STUFF AND CLEANING #### test: echo $(CXX) $(CXXFLAGS) $(SDLFLAGS) -o $(BINARY) $(OBJECTFILES) .PHONY: clean run .IGNORE: clean run clean: rm src/*.*~ rm obj/*.o rm obj/*.a rm $(BINARY) run: ./bin/invaders

SDLWrapper.cpp

#include <iostream> #include <vector> #include <string> #include <cstdlib> #include <SDL.h> #include <SDL_image.h> #include <SDL_ttf.h> #include "SDLWrapper.h" #include "gameLogic.h" #include "gameObjects.h" #include "gameObjectProjectile.h" #include "gameObjectPlayer.h" #include "gameObjectInvader.h" SDL_Surface* SDLWrapper::convertImage(SDL_Surface *inSurf){ //Converts Images to correct bit depth. // do not forget to free the old surface if needen.. SDL_Surface *newSurf; if(inSurf != NULL){ newSurf = SDL_DisplayFormatAlpha(inSurf); }else{ printf("Some shit when down when trying to convert image...\n"); printf("Is the image loaded?\n"); exit(EXIT_FAILURE); } printf("image loaded\n"); return newSurf; } SDLWrapper::SDLWrapper(){ //Constructor for class... //Itit some stuff... ScreenHeight = 480; ScreenWidth = 640; printf("onloading...\n"); SDL_Init(SDL_INIT_EVERYTHING); TTF_Init(); font = TTF_OpenFont("media/fonts/ubuntu-font-family/UbuntuMono-B.ttf", 24); screen = SDL_SetVideoMode(ScreenWidth, ScreenHeight, 8, SDL_HWSURFACE | SDL_DOUBLEBUF); colorWhite.r =255; colorWhite.b =255; colorWhite.g =255; textScore = TTF_RenderText_Solid(font, "Score: 0", colorWhite); SDL_Surface *tmpimage; //somewhare te store the images temorarely.. tmpimage = IMG_Load("media/images/player.png"); playerImage = convertImage(tmpimage); tmpimage = IMG_Load("media/images/invader.png"); invaderImage = convertImage(tmpimage); tmpimage = IMG_Load("media/images/explosion.png"); explotionImage = convertImage(tmpimage); tmpimage = IMG_Load("media/images/projectile.png"); projetileImage = convertImage(tmpimage); SDL_FreeSurface(tmpimage); //freeing the temp image.. isRun = (true); player = new gameObjectPlayer(100, 100, ScreenWidth/2,\ (ScreenHeight/2)+(ScreenWidth/4), playerImage); printf("everything onloaded \n"); } SDLWrapper::~SDLWrapper(){ //free willy! \o/.... sorry free the surfaces.. // | // / \ printf("offloading...\n") SDL_FreeSurface(playerImage); SDL_FreeSurface(invaderImage); SDL_FreeSurface(explotionImage); SDL_FreeSurface(projetileImage); SDL_FreeSurface(screen); TTF_CloseFont(font); TTF_Quit(); SDL_Quit(); printf("everything offloaded...\n"); } void SDLWrapper::mainLoop(){ printf("mainLoop\n"); const int FPS = 85; //Max FPS Uint32 fpsTimerStart; //0 up, 1 down, 2 left, 3 righ, 4 shoot, 5 quit bool eventBool[6] = {0, 0, 0, 0, 0, 0}; SDL_Event event; while(isRun){ fpsTimerStart = SDL_GetTicks(); SDL_PollEvent( &event ); switch(event.type){ case SDL_QUIT: eventBool[5] = 1; printf("exiting?\n"); break; case SDL_KEYDOWN: switch(event.key.keysym.sym){ case SDLK_ESCAPE: case SDLK_q: eventBool[5] = 1; break; case SDLK_UP: eventBool[0] = 1; eventBool[1] = 0; break; case SDLK_DOWN: eventBool[1] = 1; eventBool[0] = 0; break; case SDLK_LEFT: eventBool[2] = 1; eventBool[3] = 0; break; case SDLK_RIGHT: eventBool[3] = 1; eventBool[2] = 0; break; case SDLK_SPACE: eventBool[4] = 1; break; default: break; } break; case SDL_KEYUP: switch(event.key.keysym.sym){ case SDLK_ESCAPE: case SDLK_q: eventBool[5] = 0; break; case SDLK_UP: eventBool[0] = 0; eventBool[1] = 0; break; case SDLK_DOWN: eventBool[1] = 0; eventBool[0] = 0; break; case SDLK_LEFT: eventBool[2] = 0; eventBool[3] = 0; break; case SDLK_RIGHT: eventBool[3] = 0; eventBool[2] = 0; break; case SDLK_SPACE: eventBool[4] = 0; break; default: break; } break; } if(eventBool[5]){ //quit isRun = (false); } if(eventBool[3]){ //right player->move(1,0); } if(eventBool[2]){ //left player->move(-1,0); } if(eventBool[1]){ //domn player->move(0,1); } if(eventBool[0]){ //up player->move(0,-1); } if(eventBool[4]){ //shoot player->shoot(); } player->draw(screen); SDL_Flip(screen); SDL_FillRect(screen, NULL, 0x000000000); if(SDL_GetTicks() - fpsTimerStart < 1000/FPS ){ SDL_Delay(1000/FPS - (SDL_GetTicks() - fpsTimerStart)); } } }

gameObjectPlayer.cpp:

#include <iostream> #include <vector> #include <string> #include <cstdlib> #include <SDL.h> #include <SDL_image.h> #include <SDL_ttf.h> #include "SDLWrapper.h" #include "gameLogic.h" #include "gameObjects.h" #include "gameObjectProjectile.h" #include "gameObjectPlayer.h" #include "gameObjectInvader.h" gameObjectPlayer::gameObjectPlayer(int hitpoints, int damage, int x, int y,\ SDL_Surface *image){ mHitpoints = hitpoints; mDamage = damage; mX = x; mY = y; mRadius = 16; mObjectImage = image; shootTimer = SDL_GetTicks(); // store the timer shootTime = 200; // 0.2 sec } gameObjectPlayer::~gameObjectPlayer(){ //empty? } void gameObjectPlayer::move(int deltaX, int deltaY){ mX = deltaX + mX; mY = deltaY + mY; } int gameObjectPlayer::getRadius(){ return mRadius; } void gameObjectPlayer::giveDamage(int damage){ mHitpoints -= damage; } void gameObjectPlayer::draw(SDL_Surface *surface){ objectRect.x = mX - 16; //cus the image is 32x32, have to make it render in objectRect.y = mY - 16; //the middle of the image at mX and mY SDL_BlitSurface(mObjectImage, NULL, surface, &objectRect); } bool gameObjectPlayer::isDead(){ if(mHitpoints <= 0){ return true; } else { return false; } } void gameObjectPlayer::shoot(){ if(SDL_GetTicks() - shootTimer > shootTime && !isDead()){ printf("I shot!!\n"); shootTimer = SDL_GetTicks(); } } void gameObjectPlayer::setPos(int x, int y){ //set posision if needed. mX = x; mY = y; } int gameObjectPlayer::getX(){ return mX; } int gameObjectPlayer::getY(){ return mY; } int gameObjectPlayer::getDamage(){ return mDamage; }

Av Gego

lättaste sättet är nod att använda bzr eller hg (mercurial)..

ena datorn får bara servera ett repo..

bzr serve --http #(om loggerhead är instalerat)

eller lägg upp koden på launchpad/github/bitbucket/gitorious

git är inte så användar vänligt som bzr och hg (mercurial) men väldigt populärt. git används av bladannat twittor, facebook, linux (kärnan)...

Edit:

BZR kan även servera git (om git pluginen är installerad)

bzr serve --git

Av Gego
Skrivet av Dalton Sleeper:

Det verkar som du inte skrivit nån mainloop (mainLoop()) eller destruktor (~SDLWrapper()), stämmer det?

Stämmer mycket väl.
Skall börja nu...

Koden till mainLoop är den lättaste bara en gigantisk while-loop

hela hälgen förstörd? neee... blit ändå mycket sittande framför datorn...

Desutom glömde jag -lSDL_image -lSDL_ttf som g++ flagga..

Av Gego

EDIT:
glömde spara...
(för van vid vim...)

$ make g++ -W -Wall -o0 -g `sdl-config --cflags --libs` -c src/SDLWrapper.cpp -o obj/SDLWrapper.o g++ -W -Wall -o0 -g `sdl-config --cflags --libs` -c src/gameLogic.cpp -o obj/gameLogic.o g++ -W -Wall -o0 -g `sdl-config --cflags --libs` -c src/gameObjects.cpp -o obj/gameObjects.o g++ -W -Wall -o0 -g `sdl-config --cflags --libs` -c src/gameObjectProjectile.cpp -o obj/gameObjectProjectile.o g++ -W -Wall -o0 -g `sdl-config --cflags --libs` -c src/gameObjectPlayer.cpp -o obj/gameObjectPlayer.o g++ -W -Wall -o0 -g `sdl-config --cflags --libs` -c src/gameObjectInvader.cpp -o obj/gameObjectInvader.o ar rs obj/gameObjects.a obj/gameObjects.o obj/gameObjectProjectile.o obj/gameObjectPlayer.o obj/gameObjectInvader.o g++ -W -Wall -o0 -g `sdl-config --cflags --libs` obj/main.o obj/SDLWrapper.o obj/gameLogic.o obj/gameObjects.a -o bin/invaders obj/main.o: In function `main': /home/gego/svn/invaders-sdl/src/main.cpp:22: undefined reference to `SDLWrapper::mainLoop()' /home/gego/svn/invaders-sdl/src/main.cpp:20: undefined reference to `SDLWrapper::~SDLWrapper()' /home/gego/svn/invaders-sdl/src/main.cpp:20: undefined reference to `SDLWrapper::~SDLWrapper()' obj/SDLWrapper.o: In function `SDLWrapper': /home/gego/svn/invaders-sdl/src/SDLWrapper.cpp:38: undefined reference to `TTF_Init' /home/gego/svn/invaders-sdl/src/SDLWrapper.cpp:40: undefined reference to `TTF_OpenFont' /home/gego/svn/invaders-sdl/src/SDLWrapper.cpp:48: undefined reference to `TTF_RenderText_Solid' /home/gego/svn/invaders-sdl/src/SDLWrapper.cpp:52: undefined reference to `IMG_Load' /home/gego/svn/invaders-sdl/src/SDLWrapper.cpp:55: undefined reference to `IMG_Load' /home/gego/svn/invaders-sdl/src/SDLWrapper.cpp:58: undefined reference to `IMG_Load' /home/gego/svn/invaders-sdl/src/SDLWrapper.cpp:61: undefined reference to `IMG_Load' collect2: ld returned 1 exit status make: *** [default] Fel 1

så det värkar fungera nu?

Av Gego
Skrivet av Dalton Sleeper:

Det bör nog vara:

SDL_Surface* SDLWrapper::convertImage(SDL_Surface *inSurf)

Om man skriver != så betyder det "inte lika med", dvs kanelbulle != kaka. Den finns inte för just det som används, om du har rätt typ på variabeln kanske det fungerar.
Får man fråga vad eller varför du ger dig in på detta?

är en uppgift.... skall skriva ett spel...

att vänta tills nästa föreläsning kan jag inte göra... redan så ont om tid...

en annan fräga är varför man lär ut C++ (som första språk) när det gång på gång visat sig vara extremt dåligt att lära ut med.
Python, haskel och -ådana språk är bättre att lära ut... enligt statistiken.

Av Gego

EDIT:

hadde skrivirt fel...

$ make g++ -W -Wall -o0 -g `sdl-config --cflags --libs` -c src/SDLWrapper.cpp -o obj/SDLWrapper.o src/SDLWrapper.cpp: In member function ‘SDL_Surface* SDLWrapper::convertImage(SDL_Surface&)’: src/SDLWrapper.cpp:23:16: error: no match for ‘operator!=’ in ‘inSurf != 0l’ src/SDLWrapper.cpp:24:39: error: cannot convert ‘SDL_Surface’ to ‘SDL_Surface*’ for argument ‘1’ to ‘SDL_Surface* SDL_DisplayFormat(SDL_Surface*)’ src/SDLWrapper.cpp: In constructor ‘SDLWrapper::SDLWrapper()’: src/SDLWrapper.cpp:50:16: error: ‘tmpimage’ declared as reference but not initialized src/SDLWrapper.cpp:52:48: error: no match for ‘operator=’ in ‘tmpimage = IMG_Load(((const char*)"media/images/player.png"))’ /usr/include/SDL/SDL_video.h:96:28: note: candidate is: SDL_Surface& SDL_Surface::operator=(const SDL_Surface&) src/SDLWrapper.cpp:55:49: error: no match for ‘operator=’ in ‘tmpimage = IMG_Load(((const char*)"media/images/invader.png"))’ /usr/include/SDL/SDL_video.h:96:28: note: candidate is: SDL_Surface& SDL_Surface::operator=(const SDL_Surface&) src/SDLWrapper.cpp:58:51: error: no match for ‘operator=’ in ‘tmpimage = IMG_Load(((const char*)"media/images/explotion.png"))’ /usr/include/SDL/SDL_video.h:96:28: note: candidate is: SDL_Surface& SDL_Surface::operator=(const SDL_Surface&) src/SDLWrapper.cpp:61:51: error: no match for ‘operator=’ in ‘tmpimage = IMG_Load(((const char*)"media/images/projetile.png"))’ /usr/include/SDL/SDL_video.h:96:28: note: candidate is: SDL_Surface& SDL_Surface::operator=(const SDL_Surface&) src/SDLWrapper.cpp:64:27: error: cannot convert ‘SDL_Surface’ to ‘SDL_Surface*’ for argument ‘1’ to ‘void SDL_FreeSurface(SDL_Surface*)’ make: *** [obj/SDLWrapper.o] Fel 1

SDLWrapper.cpp:

SDLWrapper::SDLWrapper(){ //Constructor for class... //Itit some stuff... SDL_Init(SDL_INIT_EVERYTHING); TTF_Init(); font = TTF_OpenFont("media/fonts/ubuntu-font-family/UbuntuMono-B.ttf", 24); screen = SDL_SetVideoMode(640, 480, 8, SDL_HWSURFACE | SDL_DOUBLEBUF); colorWhite.r =255; colorWhite.b =255; colorWhite.g =255; textScore = TTF_RenderText_Solid(font, "Score: 0", colorWhite); SDL_Surface& tmpimage; //somewhare te store the images temorarely.. tmpimage = IMG_Load("media/images/player.png"); playerImage = convertImage(tmpimage); tmpimage = IMG_Load("media/images/invader.png"); invaderImage = convertImage(tmpimage); tmpimage = IMG_Load("media/images/explotion.png"); explotionImage = convertImage(tmpimage); tmpimage = IMG_Load("media/images/projetile.png"); projetileImage = convertImage(tmpimage); SDL_FreeSurface(tmpimage); //freeing the temp image.. }