Domanda

D'accordo,

Ecco cosa sto cercando di fare ... In questo momento sta compilando ma non riesce a collegare ... LNK2001

Voglio i metodi statici perché non ci sono variabili membro, tuttavia li voglio anche in linea per gli speedups che forniscono.

Qual è il modo migliore per farlo? Ecco cosa ho in breve:

/* foo.h */
class foo
{
    static void bar(float* in);
};

/* foo.cpp */
inline void foo::bar(float* in)
{
    // some dark magic here
}

Sto provando a farlo perché voglio essere in grado di andare:

foo::bar(myFloatPtr);

foo non ha variabili membro ... non ha senso.

È stato utile?

Soluzione

Se stai chiamando la barra da un altro file cpp, diverso da foo.cpp, deve trovarsi in un file di intestazione.

Altri suggerimenti

In primo luogo, li inserirei in uno spazio dei nomi , perché non esiste alcuna logica in quel " class " . In secondo luogo, è possibile definire direttamente il corpo delle funzioni nel file di intestazione per consentire al compilatore di vederle. Altrimenti, è necessario che l'ottimizzazione dell'intero programma sia eseguita dal linker per incorporare tali funzioni (AFAIK).

È necessario definire la funzione incorporata nel file di intestazione, non in un file di implementazione separato. Le definizioni sono necessarie quando il file di intestazione è #incluso, se si spera che sia inline, dopo tutto.

L'errore del collegamento che stai vedendo è perché la dichiarazione (nel file di intestazione) non informa il compilatore che il metodo deve essere in linea, mentre l'implementazione è in linea, quindi non disponibile per il collegamento.

Le funzioni generalmente in linea sono implementate nel punto in cui sono dichiarate (nel file di intestazione). Il compilatore è libero di incorporare le funzioni come le hai, ma non puoi forzare per incorporare nulla. Se stai utilizzando Visual C ++, abilita " inline qualsiasi opportuna "quotazione", "generazione di codice time-link" " e "favorisce il codice rapido".

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