C ++ che collega problema su Visual Studio 2008 quando reticolazione diversi progetti sulla stessa soluzione

StackOverflow https://stackoverflow.com/questions/2507595

Domanda

sto usando Google framework di test per impostare alcuni test di unità. Ho avuto tre progetti nella mia soluzione:

  • FN (il mio progetto)
  • FN_test (i miei test)
  • GTEST (Google Framework Test)

I set FN_test avere FN e GTEST come riferimenti (dipendenze), e quindi penso di essere pronto a creare le mie prove (che ho già messo tutti a / MTd (non fare questo è stato portandomi a errori di collegamento prima)).

In particolare, definisco una classe chiamata Imbarcarsi in FN vorrei provare utilizzando FN_test. Fin qui tutto bene. Così scrivo una classe chiamato EmbarkTest utilizzando googletest, dichiarare un membro Imbarcarsi * e scrivere dentro il costruttore:

EmbarkTest() {
  e = new Embark(900,2010);
}

Poi, F7 preme, ottengo il seguente:

1>FN_test.obj : error LNK2019: unresolved external symbol "public: __thiscall Embark::Embark(int,int)" (??0Embark@@QAE@HH@Z) referenced in function "protected: __thiscall EmbarkTest::EmbarkTest(void)" (??0EmbarkTest@@IAE@XZ) 1>D:\Users\lg\Product\code\FN\Debug\FN_test.exe : fatal error LNK1120: 1 unresolved externals

Qualcuno sa che cosa ho fatto di male e / o che cosa posso fare per risolvere questo?

Modifica : Relevant codice Embark.h

class Embark
{
public:

   //Constructor for initial state
   Embark(int _id, int _year);
   //Destructor
   ~Embark();   
/* ... */
}
È stato utile?

Soluzione

Ho trovato la risposta ad essere piuttosto semplice. Dopo due giorni di intensa headknocking, è questo:

Devi compilare il progetto principale, come .lib e non .exe

Dopo aver fatto questo, tutto è andato come un collegamento beatitudine. Ho pensato di Visual Studio sarebbe farlo automaticamente per me, perché ho dichiarato una dipendenza a FN da FN_test: ho assunto Visual Studio creerebbe le librerie. Essa non ha fatto.


RANT (non c'è bisogno di leggere dopo questo)
Dal momento che è piuttosto raro per collegare un progetto che fa un eseguibile per un altro che fa la stessa cosa, trovare riferimenti su questo tipo di problema è un po 'difficile. Ricerche di Google mi ha presentato risultati utili. forum MSDN erano anche inutile.

Ma quando si fa il test delle unità su un'applicazione, sarà comune avere questo accada, dicono, un progetto di test e di un progetto di applicazione sulla stessa soluzione? Non ho conoscenza di altri framework di test per C ++. Ho scelto Google quadro di prova per:

  1. In Google fidarci
  2. Gran documentazione
  3. Molto semplice da usare e capire

Ma, tuttavia, non ha molto meriti in materia di integrazione. Credo che altri strumenti avrebbero integrare modo migliore per Visual Studio, IDE risposta inclusiva. Ma ho preferito soffrire ora che dopo. Spero che questo strumento continua a migliorare, per mi è piaciuto.

Altri suggerimenti

Il linker non riesce a trovare la definizione del costruttore Embark.

  • Avete definito che il costruttore da qualche parte?
  • È il vostro progetto di test in realtà collegamento alla libreria FN?

Il linker non riesce a trovare Embark::Embark(int, int)

Ecco cosa dice MSDN su errore LNK2019 .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top