PDA

Voir la version complète : [PSP][Aide] c++ vector erreur de compilation [résolu]


daaa57150
16/05/2007, 11h46
Salut tous le monde, je débute en developpement c++ sur psp (je dev en java normalement), et je bloque a peine commencé :(
Voilà j'essaie d'utiliser la classe/le template vector de stl en c++ mais le compilo m'insulte de cette manière (ca varie un peu suivant ce que j'essaie de modifier mais en gros c'est toujours le même problème):
/usr/local/pspdev/lib/gcc/psp/4.0.2/../../../../include/c++/4.0.2/bits/cpp_type_traits.h (208) : error: redefinition of 'struct std::__is_integer<short int>'
/usr/local/pspdev/lib/gcc/psp/4.0.2/../../../../include/c++/4.0.2/bits/cpp_type_traits.h (172) : error: previous definition of 'struct std::__is_integer<short int>'
main.cpp: In function 'int main(int, char**)':

Pourtant ce que je fais m'a l'air super simple je pige pas.

Voila mon main:
#include <stdio.h>
#include "OSLib/oslib.h"
#include "Anim.h"

using namespace std;

PSP_MODULE_INFO("anim4oslib example", 0, 1, 1);
PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER | THREAD_ATTR_VFPU);

//functions declarations
void Keys();

int main(int argc, char* argv[])
{
scePowerSetClockFrequency(333, 333, 166);
oslInit(0); //The lib
oslInitGfx(OSL_PF_8888, 1); //Gfx
oslInitConsole(); //Text
oslInitAudio(); //Sound

oslSetKeyAutorepeatInit(40);
oslSetKeyAutorepeatInterval(10);

//mon code
Anim *anim=new Anim();

while (!osl_quit)
{
Keys();
oslStartDrawing();

//code here
oslClearScreen(RGB(255,0,0));
//oslDrawImageSimple(anim->getImage());

oslEndDrawing();
oslSyncFrame();
oslAudioVSync();
}

oslEndGfx();
oslQuit();
return 0;
}


void Keys()
{
oslReadKeys();
if (osl_keys->pressed.start)
oslQuit(); //Exit the sample
if (osl_keys->pressed.select) //Take a screenshot
oslWriteImageFile(OSL_SECONDARY_BUFFER, "screenshot.png", 0);
}


Ma class "Anim":
#ifndef ANIM_H_
#define ANIM_H_
#include "OSLib/oslib.h"
#include <vector>

class Anim
{
private:
OSL_IMAGE *m_img;

public:
Anim();
//TODO: const pour les fonctions get
OSL_IMAGE *getImage() const;

};

#endif
#include "Anim.h"

Anim::Anim()
{
OSL_IMAGE *temp, *img=NULL;
//Load & swizzle for best speed
temp = oslLoadImageFile("test.png", OSL_IN_RAM, OSL_PF_5551);
if (temp)
{
img = oslCreateSwizzledImage(temp, OSL_IN_VRAM);
oslDeleteImage(temp);
}

m_img=img; //pointeurs
}

OSL_IMAGE *Anim::getImage() const
{
return m_img;
}


Et le makefile:
TARGET = anim4oslib
OBJS = main.o Anim.o

INCDIR =
CFLAGS = -G4 -Wall -O2
CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti
ASFLAGS = $(CFLAGS)

LIBDIR =
LDFLAGS =
STDLIBS= -losl -lpng -lz -lpspsdk -lpspctrl -lpspumd -lpsprtc -lpsppower -lpspgu -lpspaudiolib -lpspaudio -lm -lstdc++
LIBS=$(STDLIBS)$(YOURLIBS)

EXTRA_TARGETS = EBOOT.PBP
PSP_EBOOT_TITLE = anim4oslib example
PSP_EBOOT_ICON = ICON0.png

PSPSDK=$(shell psp-config --pspsdk-path)
include $(PSPSDK)/lib/build.mak

J'ai mis en magenta ce que j'ai modifié du makefile fourni avec oslib, et en rouge la ligne qui fait merder la compilation. Si je la commente ca fonctionne, mais évidemment, je veux utiliser un vector...

Si une âme charitable veut bien m'aider, moi je pige que dalle.

Merci.



PS: si ca peut aider, j'ai installé le pspsdk ya 2 semaines seulement, je suis sous windows xp, et je bosse dans eclipse en utilisant le fichier vs-pspdev.bat comme expliqué quelque part sur ce site si je me souviens bien.
Les exemples d'oslib fonctionnent donc je suis paumé :) à l'aide :).

daaa57150
16/05/2007, 12h08
---


on dirait qu'il n'aime pas les booleens en fait, voila les struct qui l'embetent (cpp_type_traits.h):
template<>
struct __is_integer<bool>
{
enum { __value = 1 };
typedef __true_type __type;
};

template<>
struct __is_integer<short>
{
enum { __value = 1 };
typedef __true_type __type;
};

pour lui bool==short, quelqu'un comprend?


EDIT: ok ca compile, j'ai interverti ces 2 lignes:
#include "OSLib/oslib.h"
#include <vector>

a priori c'est mieux d'inclure oslib toujours en dernier...