CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

probleme avec std::vector

maskware
maskware
Niveau 8
28 octobre 2003 à 13:57:47

J´ai un warning vraiment bizzare avec la stl. J´ai plusieurs dll qui interagissent et qui ont leur classes exportées avec CORE_API.

  1. ifdef CORE_IMPORT
  2. define CORE_API __declspec(dllimport)
  3. else
  4. define CORE_API __declspec(dllexport)
  5. endif
  1. include < iostream>
  2. include < vector>

class CORE_API Vector3 {
public :
float x; float y; float z;
};

class CORE_API Polygon {
public :
std::vector<Vector2> Vertices;
};

A la compilation j´ai le warning suivant :
warning C4251: ´Vertices´ : class ´std::vector<class Vector3,class std::allocator<class Vector3> > ´ needs to have dll-interface to be used by clients of class ´Polygon´

:question: Pourquoi il me dit ca alors que j´ai justement créé une interface pr la classe Vector3 ?
Si quelqu´un sait...

maskware
maskware
Niveau 8
28 octobre 2003 à 14:04:35

edit: std::vector<Vector3> Vertices; et pas std::vector<Vector2> Vertices; :p

Altonfrere
Altonfrere
Niveau 10
28 octobre 2003 à 15:31:00

verifie tes Project Settings faut surement déclarer CORE_IMPORT dans tes prog clients de la dll . ..

JeanYvesYves
JeanYvesYves
Niveau 10
28 octobre 2003 à 16:18:39

Arf ! En effet, moi je penche pour le Vector2 au lieu du Vector3...

je dirais aussi que ça fait maladroit de mettre une variable en public, mais bon...

apres, perso je ne connais pas bien l´utilisation des DLL...

maskware
maskware
Niveau 8
28 octobre 2003 à 19:11:15

Je fais un define CORE_IMPORT avant d´inclure < Core/Core.h> dans les autres dll du moteur, pour qu´ils importe les classes. Mais le probleme vient pas de la, j´ai cette erreur meme quand je compile Core.dll lui meme ! De + avant VC++ ne me disait pas ca mais depuis que j´use les STL il devient comme fou.

Le Vector2 c une erreur de me part, c´est Vector3 a la place, c abusé ke y´ait pas de fonctions d´edition sur le forum :(
En ce que concerne la variable public je vois trop pas en quoi c´est maladroit. C´est plus propre de coder Vec3.z = 5; que Vec3.SetZ(5);. Et c´est + rapide, je l´ai pas inventé mm sur l´unreal engine les données membres des classes les + courantes sont en public :)

Kelios
Kelios
Niveau 8
28 octobre 2003 à 21:31:41

Réponse en deux mots : instanciation template.

class CORE_API Vector3 {
public :
float x; float y; float z;
};

extern template class CORE_API std::vector<Vector2>;

class CORE_API Polygon {
public :
std::vector<Vector2> Vertices;
};

Voilà. Et de la, ça devrait aller...

Kelios
---------

maskware
maskware
Niveau 8
28 octobre 2003 à 22:14:52

Merci, c perfect maintenant :ok:

maskware
maskware
Niveau 8
31 octobre 2003 à 11:33:14

Tiens, pdt ke je suis là voila le code debuggé

  1. ifdef CORE_IMPORT
  2. define CORE_API __declspec(dllimport)
  3. define CORE_TEMPLATE extern template
  4. else
  5. define CORE_API __declspec(dllexport)
  6. define CORE_TEMPLATE extern
  7. endif

class CORE_API Vector3 {
public :
float x; float y; float z;
const bool operator == ( const Vector3 v) const;
const bool operator < ( const Vector3 v) const {
return false;
}
};

CORE_TEMPLATE class CORE_API std::allocator<Vector3>;
CORE_TEMPLATE class CORE_API std::vector<Vector3>;

merci encore kelios ; ) Fallait juste mettre ´extern template´ pr l´import et ´template´ pr l´export, et obligatoirement declarer les operateurs ´==´ et ´<´, meme si ils retournent tjrs les memes valeurs, sinon vc++ compile pas :(

gollumkawder
gollumkawder
Niveau 10
31 octobre 2003 à 19:16:50

Kelios...il est trop fort !
et pis il utilise ´toshop comme un dieu et pis il code son OS ( lui c´est un vrai ! ) et pis argh ! ..............................

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Création de sites web
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment