簡體   English   中英

VC ++ 2010錯誤LNK2019:無法解析的外部符號

[英]VC++ 2010 error LNK2019: unresolved external symbol

主cpp文件:

#include <iostream>
#include <cstdio>

#include "table.h"

using namespace std;

int main() {

    Table test;

    int i;
    for(i = 0; i < 26; i++) {
        cout << test.start[2] << endl;
    }

    system("PAUSE");
    return 0;
}

頭文件:

#pragma once


class Table {
    public:
        char start[26];

        Table();
        Table(char key[26]);

        ~Table();
};

cpp文件:

#include "table.h"


Table::Table() {
    char start[26] = "ABCDEFGHIJKLMNOPRSTUVWXYZ";
}

Table::Table(char key[26]) {

}

錯誤即時通訊:

1>playfair.obj : error LNK2019: unresolved external symbol "public: __thiscall Table::~Table(void)" (??1Table@@QAE@XZ) referenced in function _main

1>c:\Users\Jansu\Documents\Visual Studio 2010\Projects\playfair\Debug\playfair.exe : fatal error LNK1120: 1 unresolved externals

所以基本上我用谷歌搜索很多,不知道該怎么辦。 我找到了一些答案,但我嘗試了但沒有幫助

例如,我嘗試添加其他依賴項 ,但是我已經添加了所有依賴項

請幫助我,為什么會出現錯誤?

您必須在cpp文件中定義析構函數:

Table::~Table()
{

}

盡管標頭將Table定義為具有dtor,但cpp文件僅包含幾個構造函數-不含析構函數。 鑒於您的析構函數似乎無事可做(您尚未分配任何動態內存或類似的東西),您可能只想刪除Table::~Table();的聲明Table::~Table(); 並完成它。 在使用它時,您可能希望將Table::start設為私有。 我還將參數更改為char const *而不是使用數組符號:

class Table {
        char start[26];
    public:
        Table();
        Table(char const *key);
};

處理完之后,您將需要處理Table::Table()定義一個名為start的局部變量並對其進行初始化的事實,但是將Table::start保留為未初始化的事實,我懷疑這是您的實際情況。想要/打算。

函數_main中引用的未解析的外部符號“ public:__thiscall Table ::〜Table(void)”(?? 1Table @@ QAE @ XZ)

這就是說的意思。

“ unresolved” =“無法找到”。 “外部符號” =“功能的定義”。 它正在尋找析構函數-重要的部分是“ Table ::〜Table”。

您的類定義引用了一個析構函數,但是沒有實現它。 實施文件也沒有。 因為您引用的是析構函數,所以編譯器不會為您執行通常的自動禁用操作。 在main()中調用析構函數,因為您在main()中創建了一個實例,並且需要析構函數在main()的末尾清理它。

順便說一句,您的構造函數實際上並未初始化表中的數據。 它創建一個名為start本地數組,然后立即將其丟棄,使成員保持獨立。

您也將不能只從字符串將其分配給數組成員。 您需要使用復制功能,例如std :: copy:

Table::Table() {
    char* alphabet = "ABCDEFGHIJKLMNOPRSTUVWXYZ";
    std::copy(alphabet, alphabet + 26, start); // std::copy comes from <algorithm>.
}

您尚未定義析構函數,僅對其進行了聲明。 嘗試將標頭更改為此:

#pragma once

class Table {
    public:
        char start[26];

        Table();
        Table(char key[26]);

        ~Table() {}
};

您聲明了析構函數,因此也必須定義它。

提示在於鏈接器錯誤引用了析構函數。

  • 只需從類定義中刪除析構函數聲明:無論如何,您什么都沒有。

傑里(Jerry)對您的數組初始化問題是正確的:實際上,您根本不初始化該數組,而是在構造函數主體中創建一些從未使用過的本地數組。

暫無
暫無

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

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