如何解决错误LNK2019:未解析的外部符号

How to solve error LNK2019: unresolved external symbol

本文关键字:符号 外部 LNK2019 何解决 解决 错误      更新时间:2023-10-16

这么小的程序让我发疯。我总是收到以下错误消息:

Error   1   error LNK2019: unresolved external symbol "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall ErstesPraktikum::createNameString(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,int)" (?createNameString@ErstesPraktikum@@QAE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V23@00H@Z) referenced in function _main    Praktikum_gra.obj   GRA
Error   2   fatal error LNK1120: 1 unresolved externals C:UsersxxxDocumentsVisual Studio 2008ProjectsGRADebugGRA.exe    GRA

这是我的程序,它包含类ErstesPraktikumPraktikum_gra以及相应的头文件。

我只想使用 Praktikum_gra 类来调用 ErstesPraktikum 类的方法。我花了几个小时来解决这个错误,但没有成功。这是编程错误还是配置问题?我最后的希望是你们中的某个人可以给我一个提示......

注意:字符串只是 openCV 的 std::string 的包装器。

ErstesPraktikum.h

#include <opencv2corecore.hpp>
using namespace std;
using namespace cv;
class ErstesPraktikum
{
    private:
        String convertInteger(int);
    public:
        String createNameString(String, String, String, int);
        void readImage(String, Mat *);
        void extractObjects(int, Mat *, Mat *);
};

ErstesPraktikum.cpp

#include <opencv2corecore.hpp>
#include <opencv2highguihighgui.hpp>
#include <opencv2imgprocimgproc.hpp>
#include <fstream>
using namespace std;
using namespace cv;

String convertInteger(int value) 
{
    stringstream ss;
    ss << value;
    return ss.str();
}
String createNameString(String path, String fileName, String fileExtension, int buildNumber)
{
    String pathString = path.append(fileName);
    pathString = pathString.append(".");
    pathString = pathString.append(convertInteger(buildNumber));
    pathString = pathString.append(".");
    pathString = pathString.append(fileExtension);
    return pathString;
}
void readImage(String nameString, Mat * image) 
{
   double mn = 0, mx = 0;
   image = &cv::Mat(cv::Size(512, 512), IPL_DEPTH_8U, 1);
   unsigned short *data;
   data = (unsigned short *)image->data;
   FILE *file;
   file = fopen(nameString.c_str(), "rb");
   fseek(file, 1340, SEEK_SET);
   fread(data, sizeof(unsigned short)*512*512, 1, file);
   fclose(file);

   //cv::cvSmooth(Image,Image);
   //cv::minMaxLoc(image, &mn, &mx, NULL, NULL, 0);
   //cv::convertScaleAbs(image, *target, 255/mx, -mn*255/mx);
}
void extractObjects(int threshold, Mat * img, Mat * binImg) 
{
}

Praktikum_gra.h

class Praktikum_gra
{
    public:
        int main(void);
}

Praktikum_gra.cpp

#include "ErstesPraktikum.h"
using namespace std;
using namespace cv;
    int main(void)
    { 
        String path("C:\Users\xxx\xxx\xxx\GRA P1\Head_M\");
        String fileName("vhm");
        String fileExtension("dcm");
        ErstesPraktikum prak;
        for(int i = 1001; i <= 1245; i++) 
        {
            String nameString = prak.createNameString(path, fileName, fileExtension, i); // this line is the cause of the error message, but why ?
        }
        return 0;
    }

我已经尝试为所有方法添加类前缀,例如:

String ErstesPraktikum::createNameString(String path, String fileName, String fileExtension, int buildNumber)
{
    // [...]
}

但这会抛出另一个错误消息:

Error   1   error C2653: 'ErstesPraktikum' : is not a class or namespace name   c:usersxxxdocumentsvisual studio 2008projectsgragra_u1erstespraktikum.cpp   17  GRA

你必须

#include "ErstesPraktikum.h"

ErstesPrakticum.cpp.然后,您需要在实现中使用ErstesPrakticum::

String ErstesPraktikum::createNameString( .... ) { .... }

等等。

相关文章: