Sto tentando di utilizzare le funzioni membro inline di una particolare classe. Ad esempio la dichiarazione di funzione e l'attuazione senza inlining in quanto tale:Errore linker funzione inline
nel file di intestazione:
int GetTplLSize();
nel file cpp:
int NeedleUSsim::GetTplLSize()
{
return sampleDim[1];
}
Per qualche ragione, se ho messo il " "inline" parola chiave in uno dell'implementazione e dichiarazione, così come in entrambi i luoghi, ricevo errori linker come mostrato:
Creating library C:\DOCUME~1\STANLEY\LOCALS~1\TEMP\MEX_HN~1\templib.x and object C:\DOCUME~1\STANLEY\LOCALS~1\TEMP\MEX_HN~1\templib.exp mexfunction.obj : error LNK2019: unresolved external symbol "public: int __thiscall NeedleUSsim::GetTplLSize(void)" ([email protected]@@QAEHXZ) referenced in function _mexFunction mexfunction.mexw32 : fatal error LNK1120: 1 unresolved externals C:\PROGRA~1\MATLAB\R2008B\BIN\MEX.PL: Error: Link of 'mexfunction.mexw32' failed.
Cosa deve essere necessario per eliminare questo errore (ad es. cosa sto facendo male in termini di rendere queste funzioni membro inline)?
È questo l'unico modo? (Voglio separare separatamente la dichiarazione e l'implementazione per motivi di leggibilità) – stanigator
Fondamentalmente sì. Il compilatore deve conoscere il corpo della funzione durante la compilazione delle chiamate, quindi il corpo deve trovarsi nel file di intestazione incluso. Tuttavia, è possibile dichiarare semplicemente la funzione nella dichiarazione della classe e aggiungere l'implementazione in un secondo momento nel file di intestazione. – Hans
Vedo. Credo che dovrei vivere con la scrittura del codice in questo modo allora. Grazie per i consigli. – stanigator