我的Visual Studio 2005 C ++项目中存在一些奇怪的链接问题。 和往常一样,我在头文件中声明了类,并在cpp中定义了它的方法。 A我的项目中包含所有这些文件。 我仍然有未解析的外部符号calcWeight。看来我实际上在我的main函数中使用了这个类。 calcWeight()在父类CHDRGenerator中声明为virtual 如果我在cpp中注释代码并在类体中定义calcWeight,它可以正常工作。但我真的不喜欢这种魔力。 有人可以帮忙吗?
以下是代码的一部分:
//mann-pickard.h
#include "stdafx.h"
#include "simple.h"
class CHDRGenerator_Mann_Pickard : public CHDRGenerator
{
public:
/// @name Constructors
/// @{
/// @brief a constructor using prepared imaged sequence
CHDRGenerator_Mann_Pickard(CSimpleImageFile * imSeq, int seqL) : CHDRGenerator(imSeq, seqL)
{
}
/// @brief a constructor using filenames
CHDRGenerator_Mann_Pickard(std::string * filenames, int seqL) : CHDRGenerator(filenames, seqL)
{
}
/// @brief a constructor, CFileNameSequence object parameter
CHDRGenerator_Mann_Pickard(CFileNameSequence & const fileseq) : CHDRGenerator(fileseq)
{
}
/// @}
private:
inline double calcWeight(double val);
};
//mann-pickard.cpp
#include "mann-pickard.h"
//=======================Class CHDRGenerator_Mann_Pickard methods=====================//
//...
inline double CHDRGenerator_Mann_Pickard::calcWeight(double val)
{
const double gamma = 2.2f;
return gamma * pow(val, gamma - 1);
}
//=====================End of Class CHDRGenerator_Mann_Pickard methods=================//
“simple.h”是具有CHDRGenerator类实现的标头。 我知道它应该有效......因为它总是奏效。也许我有一些愚蠢的难以找到的错误?..
答案 0 :(得分:0)
如果从calcWeight的声明和定义中删除“inline”会发生什么?