错误LNK2001:未解析的外部符号,尽管包含头文件

error LNK2001: unresolved external symbol despite inclusion of header file

本文关键字:符号 文件 包含头 外部 LNK2001 错误      更新时间:2023-10-16

我有一个问题似乎无法解决。我有一个文件JobDispatcher.cpp,其中包括一个文件#include "CalculateNormalsJob.h"包含具有相同名称的类的声明。

class CalculateNormalsJob : public Job
{
public:
    CalculateNormalsJob(some params);
...
};

CalculateNormalsJob.cpp文件包含以下定义

CalculateNormalsJob::CalculateNormalsJob(some params)
    : Job(params)
{
}

CalculateNormalsJob.h和CalculateNrmalsJob.cpp与JobDispatcher.cpp位于同一项目和文件夹中,后者将创建一个作业对象作为

add(new CalculateNormalsJob(some params));

在链接过程中,我收到以下错误

Error   9   error LNK2001: unresolved external symbol "public: __thiscall CalculateNormalsJob::CalculateNormalsJob(class ResourceMap *,class JobScheduler *,class Job *,int)" (??0CalculateNormalsJob@@QAE@PAVResourceMap@@PAVJobScheduler@@PAVJob@@H@Z)    C:Fredrikvs12proflexascannerJobDispatcherJob.obj

我对自己忘记的事一无所知。我使用的是Win7下的Visual studio 2012和附带的v110编译器。

感谢您的帮助!

编辑:

由于某种原因,似乎CalculateNormalsJob.cpp没有被编译。然而,我不知道为什么。它包含在项目中,Visual studio的IntelliSense了解该类及其函数。

编辑2:

CalculateNormalsJob.h
CalculateNormalsJob(ResourceMap *state, JobScheduler *scheduler,  Job* listener, int scanNumber);

CalculateNormalsJob.cpp
CalculateNormalsJob::CalculateNormalsJob(ResourceMap *state, JobScheduler *scheduler, Job* listener, int scanNumber)
    : Job(state, scheduler, listener), scanNumber(scanNumber)
{
}

Call:
add(new CalculateNormalsJob(state,scheduler,this,scanNbr));

我检查了CalculateNormalsJob.cpp文件的属性(右键单击->properties),结果发现它是作为头文件创建的,后来重命名为.cpp,因此它的"项目类型"设置设置为头文件。当我将设置更改为C/C++编译器时,它会按照应有的方式编译,链接器可以找到外部符号。