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