可能的类/析构函数设置问题,收到错误消息“未解析的外部符号”

Possible Class/Destructor setup issue, receiving error message 'unresolved external symbol'

提问人:LKB 提问时间:10/3/2014 最后编辑:CœurLKB 更新时间:5/1/2018 访问量:1609

问:

编辑:我相信我的问题是因为我从 .exe 项目调用我的 FacePoint 类,而 FacePoint 实际上位于同一个解决方案中的 .dll 项目中。有什么想法可以解决这个问题吗?


我有一个名为 FacePoint 的类,它获取并设置面部特征的 X 和 Y 值。

这是 FacePoint.h:

 #pragma once
class FacePoint
{
public:
    FacePoint(void);
    FacePoint(int X, int Y);

    void FacePoint::SetX(int X);
    void FacePoint::SetY(int Y);
    void FacePoint::SetXY(int X, int Y);

    int FacePoint::GetX();
    int FacePoint::GetY();

    ~FacePoint(void);

 private:
    int coordX;
    int coordY;
};

...和 FacePoint.cpp:

#include "StdAfx.h"
#include "FacePoint.h"

FacePoint::FacePoint(void)
{
    coordX = 0;
    coordY = 0;
}

FacePoint::FacePoint(int X, int Y)
{
    coordX = X;
    coordY = Y;
}

void FacePoint::SetX(int X){ coordX = X; }

void FacePoint::SetY(int Y){ coordY = Y; }

void FacePoint::SetXY(int X, int Y)
{
    coordX = X;
    coordY = Y;
}

int FacePoint::GetX(){ return coordX; }

int FacePoint::GetY(){ return coordY; }

FacePoint::~FacePoint(){}

这对我来说似乎没问题,但是当我尝试实现 FacePoint 对象的向量时,如下所示:

    std::vector<FacePoint> point;
    result = GetFeaturePoints(pHandle, &point);
    int x = 0;
    int y = 0;
    for(int p = 0; p < point.size(); p++)
    {
        x = point[p].GetX();
        y = point[p].GetY();
    }

我收到以下编译时错误:

错误 37 错误 LNK1120:3 个未解决的外部问题

错误 36 错误 LNK2001:未解析的外部符号“public: __thiscall FacePoint::~FacePoint(void)“ (??1FacePoint@@QAE@XZ)

错误 35 错误 LNK2001:未解析的外部符号“public: int __thiscall FacePoint::GetX(void)“ (?GetX@FacePoint@@QAEHXZ)

错误 34 错误 LNK2001:未解析的外部符号“public: int __thiscall FacePoint::GetY(void)“ (?GetY@FacePoint@@QAEHXZ)

我不确定为什么会发生这种情况,但从错误消息来看,我怀疑这与我的析构函数有关?...

我四处搜索,其中大多数问题都与缺少构造函数/析构函数定义有关。据我所知,我的构造函数似乎很好,错误消息似乎暗示了析构函数。我唯一能想到的是我缺少一个破坏 int X、int Y 的分解器,但我认为基元不需要它?...

任何帮助都是值得赞赏的。谢谢!!


编辑:所以我忘了在我的主 #include“FacePoint.h”(我正在创建 FacePoint 的矢量)。我添加了它,但收到此编译时错误消息:

错误 4 错误 LNK2019:未解析的外部符号“public:__thiscall FacePoint::~FacePoint(void)”(??1FacePoint@@QAE@XZ) 在函数 “public: void * __thiscall FacePoint::'scalar deleting destructor'(unsigned int)” (??_GFacePoint@@QAEPAXI@Z)

伙计们,有什么想法吗?谢谢!

C++ DLL 未解析的外部

评论


答:

1赞 Mark Ransom 10/3/2014 #1

它看起来不是您项目的一部分。这意味着链接器找不到实现这些函数的代码主体。FacePoint.cpp

评论

0赞 LKB 10/3/2014
谢谢你的回复,马克!所以你是对的,我没有在我的主(创建矢量的地方)中包含 #include“FacePoint.h”。我已经清理并重新构建了我的解决方案,并尝试声明 FacePoint 对象的向量,但仍然收到错误消息(请参阅更新的帖子)。谢谢!
1赞 Mark Ransom 10/3/2014
@LBran我的答案还是一样的。问题不在于文件,而在于 ..h.cpp
0赞 Cœur #2

OP的解决方案。

通过将类替换为结构来解决。