簡體   English   中英

LNK 2019在MFC中使用自定義類時出錯

[英]LNK 2019 Error using custom class in MFC

我開發了兩個類,用於在控制台應用程序中運行相機抓取器(一個用於抓取圖像,一個用於處理圖像),現在想將這些類實現到MFC項目中。 該類在控制台應用程序中運行良好。 當我嘗試在MFC應用程序中使用它們時,出現LNK2019錯誤。 這是一些代碼段,圖像顯示類的編寫方式非常相似:

IMAQ類(用於捕獲圖像):IMAQ.h:

#pragma once
#include <queue>
#include <fstream>
#include "CircularInterface.h"
...  // some more includes

class IMAQ
{
public:
explicit    IMAQ();
virtual     ~IMAQ();

int SetupAcq(pRTCaptureStruc pRTCaptStruc);
... // some more functions

// The image acquisition thread
UINT    ImgAcqThread(LPVOID lpdwParam);

private:
BFU32   BdNum,
    BdInitOptns,
    NumBuffers,
    CircInitOptions;

// image acquisition parameters
BFU32   ImageSize,
    BitDepth,
    Xsize,
    Ysize,
    NumPixels,
    BytesPerPix;
bool    GetFrame;

    ... // some more private members

};  // class IMAQ

IMAQ.cpp:

#include "..\\Include\\IMAQClass.h"


IMAQ::IMAQ()
{
BdNum = 0;
BdInitOptns = CiSysInitialize;
CircInitOptions = BiAqEngJ;
NumBuffers = 4;
FilePath = NULL;
_isClean = true;
}  

IMAQ::~IMAQ()
{
// Empty destructor
}

int IMAQ::SetupAcq(pRTCaptureStruc pRTCaptStruc)
{
...// left out code for brevity
}

... // some more functions, all functions declared in header file are defined.

uOCT MFC AppDlg.h:

#pragma once

#include "ImgDspClass.h"
#include "IMAQClass.h"
#include "afxwin.h"

// CuOCTMFCAppDlg dialog
class CuOCTMFCAppDlg : public CDialogEx
{

public:
HBITMAP hBmpWellA6;
BITMAP  BmpWellA6;
UINT8   *pBitsWellA6;

BITMAPINFOHEADER    bmpInfo;

IMAQ                ImgAcq;
ImgDspClass         ImgDsp;

char    *LUTpath;
char    FileName[FILENAME_MAX];

  ... // more members
};

uOCT MFC AppDlg.cpp:

#include "stdafx.h"
#include "uOCT MFC App.h"
#include "uOCT MFC AppDlg.h"
#include "afxdialogex.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// CAboutDlg dialog used for App About

class CAboutDlg : public CDialogEx
{
public:
    CAboutDlg();

// Dialog Data
    enum { IDD = IDD_ABOUTBOX };

    protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support

// Implementation
protected:
    DECLARE_MESSAGE_MAP()
};

BOOL CuOCTMFCAppDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();

// Add "About..." menu item to system menu.

// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);

CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
    BOOL bNameValid;
    CString strAboutMenu;
    bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
    ASSERT(bNameValid);
    if (!strAboutMenu.IsEmpty())
    {
        pSysMenu->AppendMenu(MF_SEPARATOR);
        pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
    }
}

// Set the icon for this dialog.  The framework does this automatically
//  when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE);         // Set big icon
SetIcon(m_hIcon, FALSE);        // Set small icon


// Change the file path here to change save location
ImgAcq.SetFilePath("C:\\Users\\uOCT clone\\Documents\\temporary\\test.dat");
ImgDsp.SetReferencePath("C:\\Users\\uOCT clone\\Documents\\temporary\\ref.dat");

return TRUE;  // return TRUE  unless you set the focus to a control
}

在我的MFC對話框頭文件中,我包含IMAQClass.h頭文件,該文件足以使控制台應用程序正常工作,但是,如上所述,MFC應用程序返回未解決的外部符號錯誤。 MFC項目似乎additional include directories其中包含包含IMAQ頭文件的目錄。

為什么我收到未解決的外部信息? 謝謝

錯誤消息要求:

 1>uOCT MFC App.obj : error LNK2019: unresolved external symbol "public: virtual __thiscall IMAQ::~IMAQ(void)" (??1IMAQ@@UAE@XZ) referenced in function "public: virtual __thiscall CuOCTMFCAppDlg::~CuOCTMFCAppDlg(void)" (??1CuOCTMFCAppDlg@@UAE@XZ)
 1>uOCT MFC AppDlg.obj : error LNK2001: unresolved external symbol "public: virtual __thiscall IMAQ::~IMAQ(void)" (??1IMAQ@@UAE@XZ)
 1>uOCT MFC App.obj : error LNK2019: unresolved external symbol "public: virtual __thiscall ImgDspClass::~ImgDspClass(void)" (??1ImgDspClass@@UAE@XZ) referenced in function "public: virtual __thiscall CuOCTMFCAppDlg::~CuOCTMFCAppDlg(void)" (??1CuOCTMFCAppDlg@@UAE@XZ)
 1>uOCT MFC AppDlg.obj : error LNK2001: unresolved external symbol "public: virtual __thiscall ImgDspClass::~ImgDspClass(void)" (??1ImgDspClass@@UAE@XZ)
 1>uOCT MFC AppDlg.obj : error LNK2019: unresolved external symbol "public: __thiscall ImgDspClass::ImgDspClass(void)" (??0ImgDspClass@@QAE@XZ) referenced in function "public: __thiscall CuOCTMFCAppDlg::CuOCTMFCAppDlg(class CWnd *)" (??0CuOCTMFCAppDlg@@QAE@PAVCWnd@@@Z)
 1>uOCT MFC AppDlg.obj : error LNK2019: unresolved external symbol "public: __thiscall IMAQ::IMAQ(void)" (??0IMAQ@@QAE@XZ) referenced in function "public: __thiscall CuOCTMFCAppDlg::CuOCTMFCAppDlg(class CWnd *)" (??0CuOCTMFCAppDlg@@QAE@PAVCWnd@@@Z)
 1>uOCT MFC AppDlg.obj : error LNK2019: unresolved external symbol "public: int __thiscall ImgDspClass::SetReferencePath(char * const)" (?SetReferencePath@ImgDspClass@@QAEHQAD@Z) referenced in function "protected: virtual int __thiscall CuOCTMFCAppDlg::OnInitDialog(void)" (?OnInitDialog@CuOCTMFCAppDlg@@MAEHXZ)
 1>uOCT MFC AppDlg.obj : error LNK2019: unresolved external symbol "public: int __thiscall IMAQ::SetFilePath(char * const)" (?SetFilePath@IMAQ@@QAEHQAD@Z) referenced in function "protected: virtual int __thiscall CuOCTMFCAppDlg::OnInitDialog(void)" (?OnInitDialog@CuOCTMFCAppDlg@@MAEHXZ)

編輯:問題解決了,但是我想我真的不明白為什么。

所以發表的評論說我需要鏈接到庫文件。 我遇到的兩個類都不會生成.dll或.lib文件,而只是.obj。 但是一時興起,我回過頭將.obj文件包含到鏈接依賴項中。

所以現在我的問題是:如果未將.obj文件與可執行文件一起生成,它們是否需要像庫一樣鏈接?

您沒有提供足夠的詳細信息來幫助您。 您已經告訴我們您遇到了鏈接器錯誤,但是您需要告訴我們確切的錯誤消息,即哪些符號未定義?

這是我的猜測; 您包括一個附加的頭文件。 該頭文件是庫的一部分,但是您尚未鏈接庫本身,僅包含了頭。 因此,您已經做好了第一部分的准備,現在您需要打開鏈接器設置頁面,添加其他庫目錄(即,.lib,.obj,.whatever實現文件所在的目錄),然后添加庫的名稱。到“其他依賴項”部分。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM