Inlägg
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...
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?
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()
[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]
* 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.
om det fungerar så fungerar det, kan även starta spelet som spottas ut..
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"
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.
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?)
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
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..
Jag reverterade tillbaka några commits i koden och samma problem....
och inget skillnad...
kolla filerna som jag postade i buggrappporten.
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...
[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;
}
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
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..
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?
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.
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..
}
- Kompressortråden, tips, erfarenheter, frågor, råd etc.44
- 2 Studio monitors till PC9
- Enkelt knep öppnar gamla Utforskaren i Windows 1116
- Fanboy-quiz: Vad kan du om Microsoft?38
- Philips-tv (svart bild... ljud & ambilight OK) 58PUS8545/120
- Edge - i Windows 114
- CRT-reparatör i Stockholmsområdet.41
- Få COOP poäng när man handlar på ex. Webhallen5
- Märkligt fel med upphastigheten på nätverk3
- Har ni fått skattepengarna?4066
- Säljes Logitech G560 halva nypriset
- Säljes MSI B550M PRO-VDH WIFI Defekt?
- Säljes SteelSeries Apex 7 Blue Switch
- Köpes Söker gamingdator till sonen
- Säljes Fractal Design Torrent TG x EKWB Quantum radiator
- Säljes Asus 3060, Gainward 1660Super, Ryzen 3600, LianLi 205M
- Säljes Samsung SSD870 EVO 2TB / 1TB 870 EVO Oöppnade
- Säljes Reciever Onkyo TX-NR626, reparationsex/reservdelsex. Komplett men trasig, missljud. Går att laga?
- Säljes AMD Ryzen 5 2600X 3.6 GHz 19MB (AM4) med tillhörande fläkt (Wraith Spire).
- Säljes HP Probook 440 G8 14"/i5-1135G7/8GB/240GB/Geforce MX450/Garanti 2025
Tester av chassi, grafikkort, processorer m.m.
- Duellen: Premium-kylare vs. budgetfavorit22
- SweClockers Noobbyggarguide - Del 5: Kabelkrångel2
- SweClockers Noobbyggarguide - Del 4: Aggressivt aggregat8
- Årets bästa soundbar – vi väljer favoriterna78
- Snabba upp din gamla dator med uppgradering67
- SweClockers Noobbyggarguide - Del 3: Den dramatiska moderkortsmonteringen12
- Snabbtest: Steam Deck överraskar som arbetsdator31
- Snabbtest: 3DMark Steel Nomad – visuellt avancerat, förvånansvärt lättdrivet80
- Grafikprestanda i Senua's Saga: Hellblade II – ett av de tyngsta PC-spelen någonsin187
- Grafikprestanda i Ghost of Tsushima – en välpolerad PC-version28