PDA

Visualizza la versione completa : [c++]errore linker LNK2019


giuseppe500
07-06-2010, 01:26
http://msdn.microsoft.com/en-us/library/799kze2z%28v=VS.100%29.aspx?appId=Dev10IDEF1&l=EN-US&k=k%28LNK2019%29;k%28VS.ERRORLIST%29;k%28VS.SOLUTI ONEXPLORER.VSPOLICY%29;k%28VS.SOLUTIONEXPLORER.SEL ECTION%29;k%28VS.SOLUTIONEXPLORER%29;k%28VS.SOLUTI ONEXPLORER.SOLUTIONS%29&rd=true


ciao.
Ho un progetto che genera una libreria statica e una dll .
la libreria viene inclusa in un secondo progetto e, ogni volta che aggiungo una classe alla libreria e compilo se utilizzo questa classe mi da un errore :linker LNK2019 e non ho ancora capito cosa provoca questo.
Il progetto ha sempre funzionato con vs 2008 adesso sto passando alla 2010 e ci sono un sacco di casini.
ma forse non è neanche quello , non mi va di parlare se non conosco a fondo l'argomento.
ho delle variabili dichiarate inline , scusate se sbaglio il termine , voglio dire cosi:


#include "factory.h"
#include "wm4LightingEffect.h"
#include "IL/il.h"
#include "textureex.h"
#include "textureeffectex.h"
#include "MaterialPhong.h"

NodePtr m_pkObjLetto = NULL; //var error?????????????????????????????
NodePtr m_pkObjTorus = NULL;
NodePtr m_pkObjSphere = NULL;
using namespace Wm4;
CFactory::CFactory(void)
{
}

e utilizzo un unico file con definizioni e dichiarazioni cosi:


#include <cv.h>
#include <highgui.h>

#include "ARToolKitPlus/TrackerMultiMarkerImpl.h"
#include "ARToolKitPlus/ar.h"
#include "structs.h"
#include "wm4materialstate.h"

#include "Model.h"
#include "Presenter.h"
#include "DynamicTextures.h"

#include "Model.cxx"
#include "Presenter.cxx"
#include "DynamicTextures.cxx"



è per qusto che ho inserito le variabili inline , altrimenti non riuscivo ad assegnargli niente,
cosa puo essere?
grazie.

shodan
07-06-2010, 13:44
Ma a cosa si riferiscono quelle variabili? Quel m_ mi fa pensare che siano variabili membro (almeno se ricordo la tua notazione). Posta qualche dettaglio in più.

MacApp
07-06-2010, 13:55
da quello che si può vedere, sono delle variabili globali.

giuseppe500
07-06-2010, 16:01
ti ricordi shodan sono relative a questo post:
http://forum.html.it/forum/showthread.php?s=&threadid=1402914
e sono variabili membro , le ho messe li perchè se le mettevo nell header appena gli assegnavo un valore mi davano errore.
Mi chiedo se non sia meglio utilizzare un metodo diverso del file che include tutte le librerie e i .h.
ciao.

shodan
07-06-2010, 19:06
Al di la dell'errore in se, non è in quel modo in cui si inizializzano le variabili membro (non dichiarate static). Devi usare il costruttore della classe. E il costruttore devi metterlo nel file .cpp comune. A quale header e classe appartengono?

giuseppe500
07-06-2010, 19:19
appartengono al file header wm4Node e alla classe Node, NodePtr è uno smart pointer di <Node>


il file header wm4Node è incluso all' interno del .cpp comune

shodan
07-06-2010, 19:49
NodePtr è uno smart pointer di <Node>


Giusto per curiosità: perché vuoi azzerare uno smart pointer che si auto azzera da solo quando lo dichiari?

giuseppe500
07-06-2010, 22:51
perchè ero stanco , e non sono esperto.
Pittosto , riesci a buttarmi giu un insieme di classi che facciano il model view presenter?
io con gli include e i riferimenti circolari non ci salto fuori , se mi riesci ad aiutare..
grazie.

altra cosa , ho messo gli inline davanti alle funzioni usate dalla libreria , ma perchè mettendo inline non da errore non l'ho mica ancora capito.
ciao

shodan
07-06-2010, 22:56
Mica era un rimprovero. :)
Però non ho confidenza con quel pattern, quindi non ho idea di come strutturare le classi.

giuseppe500
08-06-2010, 00:20
Originariamente inviato da shodan
Mica era un rimprovero. :)

meno male! :old:

e per qunto riguarda le funzioni inline perchè non danno errore come invece quelle non inline?

ciao.

Loading