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 dfObj1 = Constant(0, 1); // error LNK2019: unresolved external symbol "public: __thiscall pClickDLL::Constant::Constant(unsigned short, unsigned long)

奇怪的是,当我在 Constant 类的源/头文件中更改boost::uint16_tunsigned short,boost::uint32_tunsigned 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。

4

0 回答 0