2016-12-03 45 views
0

関数 'doSomething'のコード構造の次のタイプのMSVCデバッグビルド中にのみエラーLNK2019が発生します。コードは最適化されたビルドのために正常にコンパイルされます。誰か助けてもらえますか?エラーLNK2019:未解決の外部シンボル - 関数テンプレートのmsvcデバッグビルド

//ヘッダファイル -

class __declspec(dllimport) Test /* some functions of class Test are defined in DLL - abc */ { 
    // members 
    public: 
    template <typename T> 
    _forceinline int doSomething(T var) 
    { 
     //do some thing 
     return var.size(); 
    } 
} 

// CPPファイルabc.h

/*part of another DLL which does not link to DLL 'abc' */ 
    #include "abc.h" 
    int main() { 
     Test t; 
     Test1 var1; 
     t.doSomething(var1); 
    } 

答えて

0

そうなデバッグビルドには、関数をインラインではないでしょう。その名前にもかかわらず、_forceinlineは依然としてコンパイラに対する要求であり、デフォルトのデバッグ設定は何もインライン化しないことです。

したがって、doSomething関数がDLLの他の場所で使用されていないと、どこでもインスタンス化されず、リンカーはそれを見つけることができません。

+0

この場合、forceinlineヘルプを削除しますか?関数doSomething()は2つのDLLで定義されますが、それらが相互にリンクしていない場合は、それを行うのがいいでしょうか? –

+0

これは事実かもしれませんが、私の経験上、 '__forceinline' *はデバッグビルドに適用されます。それは単純なリクエストではありますが、コンパイラが無視することはめったにありません。私が '__forceinline'とマークした関数をインラインでは見たことがないのは、正当に*インライン化できないときだけです。インライン展開が実際に行うのは実際には愚かなことですが、コードのページやページである関数をインライン展開します。 –

関連する問題