クラス コンストラクターを呼び出すときに、未解決の外部シンボルのエラーが発生しました。コンストラクターは次のように宣言されます。
// #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 short
。boost::uint32_t
unsigned int
エラーは、ヘッダーファイルではタイプを意味するが、ソースファイルでは別のタイプを意味するなど、タイプの再定義のいくつかの間違いの結果であると思いboost::uint16_t
ます(たとえば、ヘッダーファイルでboost::uint16_t
は意味がありますが、ソースファイルでは可能です)。これは、Constant クラスのソース/ヘッダー ファイルに、異なるヘッダー ファイルをインクルードし、ヘッダー ファイルの typedef を別の方法でインクルードした場合に発生する可能性があります。しかし、タイプの前に名前空間を既に配置しているため、ここでなぜそれが起こるのかわかりません。Constant クラスのソース/ヘッダー ファイルでは、常に同じ型を意味する必要があります。ではない?unsigned short
unsigned int
boost::uint16_t
更新: 問題は、2 つのプロジェクトに異なるブースト ライブラリを使用することです。Constantクラスのプロジェクトにはboost 1.42、呼び出しファイルのプロジェクトにはboost 1.53を使用しました。