私はこのクラスで奇妙な未解決の外部シンボルエラーが発生しました。 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ファイル内にあるため、インスタンス化の時点で定義する必要があります。
ここでの問題は何ですか。どのように解決できますか?
質問を重複しているとマークする前にお読みください。ヘッダーに定義されていないテンプレートメソッドの問題ではありません。ヘッダーに定義されています。クラス自体はテンプレート化されていません。内部クラスはテンプレート化されていません。囲みクラスのシンボルはうまく解決されますが、内部クラスのシンボルは同じ翻訳単位とライブラリで定義されていますが、 – Resurrection
私は、1つは、質問を読んで、私は次の文を読んだ後、あなたの問題は明らかでした:_私はヘッダーの定義を置くときそれはうまく動作します。_ –
@AlgirdasPreidžiusあなたは深刻ですか?私は明らかにテンプレートではなく 'SaveFile :: Index :: operator bool()const'の定義を意味します。それはヘッダー全体に定義されています。 – Resurrection