2016-12-06 8 views
0

私はこのクラスで奇妙な未解決の外部シンボルエラーが発生しました。 Qtに基づいたC++ライブラリがあります。LIBDATASHARED_EXPORT__declspec(dllexport)または__declspec(dllimport)の別名です。テンプレート化されたメソッドで使用されるネストされたクラスの未解決の外部シンボル

class LIBDATASHARED_EXPORT SaveFile 
{ 
    class Index 
    { 
    public: 
     operator bool() const; //<--- defined in cpp 
    }; 

public: 
    template<typename T> load() 
    { 
     Index idx; 

     if(idx) //<--- complains about unresolved symbol... 
     { 

     } 
    } 
}; 

私はテンプレートメソッドをインスタンス化するとき、私はSaveFile::Index::operator bool() constについてunresolved external symbolを取得するライブラリとリンクする別のプロジェクトでこれを使用しています。ヘッダーにSaveFile::Index::operator bool() constの定義を置くとうまく動作します。 SaveFile::Index::operator bool() constの定義は、残りのクラス定義と同じ.cppファイル内にあるため、インスタンス化の時点で定義する必要があります。

ここでの問題は何ですか。どのように解決できますか?

+0

質問を重複しているとマークする前にお読みください。ヘッダーに定義されていないテンプレートメソッドの問題ではありません。ヘッダーに定義されています。クラス自体はテンプレート化されていません。内部クラスはテンプレート化されていません。囲みクラスのシンボルはうまく解決されますが、内部クラスのシンボルは同じ翻訳単位とライブラリで定義されていますが、 – Resurrection

+0

私は、1つは、質問を読んで、私は次の文を読んだ後、あなたの問題は明らかでした:_私はヘッダーの定義を置くときそれはうまく動作します。_ –

+0

@AlgirdasPreidžiusあなたは深刻ですか?私は明らかにテンプレートではなく 'SaveFile :: Index :: operator bool()const'の定義を意味します。それはヘッダー全体に定義されています。 – Resurrection

答えて

0

問題は、インナークラスもエクスポートする必要があるため、この場合のソリューションは、外部クラス(エクスポートされる)によってエクスポートされないため、内部クラスにLIBDATASHARED_EXPORTを追加することです。 Dependency Walkerを使って見つけました。

関連する問題