调用类构造函数时出现错误未解析的外部符号。构造函数声明为:
// #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 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
可能意味着unsigned short
在头文件中,但unsigned int
可能在源文件中)。当我在 Constant 类的源/头文件中包含不同的头文件并且头文件 typedef 不同时,可能会发生这种情况。但我不明白为什么会在这里发生,因为我已经在类型之前放置了命名空间。boost::uint16_t
在 Constant 类的源/头文件中应该始终表示相同的类型。不是吗?
更新:问题是我对两个项目使用不同的 boost 库。我在Constant类的项目中使用了boost 1.42,在调用文件的项目中使用了boost 1.53。