0

クラス コンストラクターを呼び出すときに、未解決の外部シンボルのエラーが発生しました。コンストラクターは次のように宣言されます。

// #include header files

class Constant
{
    Constant(boost::uint16_t featureID, boost::uint32_t featureValue);
}

定義は別の .cpp ファイルにあります。

// #include header files

Constant::Constant(boost::uint16_t featureID,  boost::uint32_t featureValue)
{
    m_featureID = featureID;
    m_featureValue = featureValue;
}

Constant クラスのソース/ヘッダー ファイルを正常にビルドできます。しかし、別のファイルから Constant() を呼び出すと、エラーが発生しました。

Constant dfObj1 = Constant(0, 1); // error LNK2019: unresolved external symbol "public: __thiscall pClickDLL::Constant::Constant(unsigned short, unsigned long)

奇妙なことに、Constant クラスのソース/ヘッダー ファイルを に変更すると、問題はなくなりboost::uint16_tますunsigned shortboost::uint32_tunsigned int

エラーは、ヘッダーファイルではタイプを意味するが、ソースファイルでは別のタイプを意味するなど、タイプの再定義のいくつかの間違いの結果であると思いboost::uint16_tます(たとえば、ヘッダーファイルでboost::uint16_tは意味がありますが、ソースファイルでは可能です)。これは、Constant クラスのソース/ヘッダー ファイルに、異なるヘッダー ファイルをインクルードし、ヘッダー ファイルの typedef を別の方法でインクルードした場合に発生する可能性があります。しかし、タイプの前に名前空間を既に配置しているため、ここでなぜそれが起こるのかわかりません。Constant クラスのソース/ヘッダー ファイルでは、常に同じ型を意味する必要があります。ではない?unsigned shortunsigned intboost::uint16_t

更新: 問題は、2 つのプロジェクトに異なるブースト ライブラリを使用することです。Constantクラスのプロジェクトにはboost 1.42、呼び出しファイルのプロジェクトにはboost 1.53を使用しました。

4

0 に答える 0