[英]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.