Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826

    [c++]problema errore linker e constr. template

    ciao.
    Ho il seguente template:
    codice:
    #pragma once
    #include "MVCLib.h"
    #include "viewBase.h"
    
    namespace OPEN{
    template < class Model>
    class MVC_ITEM CControllerMVC
    {
    public:
    	
    	CControllerMVC<Model>();
    	~CControllerMVC<Model>();
    	Model* m_pModel;
    };	
    	
    }
    è in una dll, ma se in un altro progetto importo l'h,ill lib e la dll e instanzio il template cosi:
    codice:
    CControllerMVC<CModelTest>* pC = new CControllerMVC<CModelTest>();
    ottengo quest errore:
    codice:
    9>testmvc.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall OPEN::CControllerMVC<class OPEN::CModelTest>::CControllerMVC<class OPEN::CModelTest>(void)" (__imp_??0?$CControllerMVC@VCModelTest@OPEN@@@OPEN@@QAE@XZ) referenced in function _main
    9>C:\Open\trunk\Open\Debug\testmvc.exe : fatal error LNK1120: 1 unresolved externals
    se tolgo il costruttore non ho errori di linker , ma non ho neanche il costruttore! chiaramente.
    c'è un modo per risolvere?

    grazie.

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    inoltre quale è il metodo corretto da usare per esportare in una dll una classe template?
    e perchè ottengo degli errori del linker per ogni funzione che definisco e solo quando la richiamo da qualche parte nel codice ?
    mentre se non la richiamo non ho nessun errore?
    grazie.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    ok, capito i template devono avere tutto il codice nel .h.
    ho rimosso le macro di esportazione dll e ha funzionato.
    sbaglio?

    grazie.

  4. #4
    Un template è un generatore di codice, non del codice compilato, per cui non si "esporta", ma si fornisce il sorgente. Occhio però che valgono anche qui i soliti discorsi sulla CRT impiegata - devi usare sia nella dll la stessa CRT in versione dll, e entrambi i progetti devono essere compilati alla stessa maniera (=entrambi debug o entrambi release), altrimenti nel passaggio di oggetti tra eseguibile e dll si possono verificare problemi.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    grazie MItaly.
    ciao

  6. #6
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.