"错误LNK2019:未解析的外部符号"是什么意思?
What does 'Error LNK2019: unresolved external symbol' mean?
我正在尝试运行一个程序,但它无法编译,我收到错误。我已经改变了一些东西,但似乎不起作用。代码是这样的:
#include <iostream>
#include <string>
#include "StackLS.h"
using namespace std;
int main()
{
int answer;
char symbol;
char n, N;
StackLS stack;
bool balenced = true;
do {
cout << " ********** MENU ********** " << endl;
cout << " 1. Basic Brackets () " << endl;
cout << " 2. Standard Brackets ()[]{} " << endl;
cout << " 3. User-Defined brackets " << endl;
cout << " Please enter your choice: " << endl;
switch (answer){
case 1:
cout << "Current Setting: () " << endl;
cout << "Enter your expression followed by a ; : " << endl;
cin >> symbol;
do {
if (symbol = '(')
stack.push( '(' );
else
if (symbol = ')' )
{
if (stack.isEmpty())
balenced = false;
else {
symbol = stack.top();
stack.pop();
}
if (balenced)
cout << "Expression is well-formed" << endl;
else
cout << "Expression is not well-formed" << endl;
}
}
while (symbol != ';' && balenced);
stack.pop();
}
}
while (answer != 'n' || 'N');
} // end main
我还没有完成程序。我想确保到目前为止我所拥有的内容将在我继续下一个案例之前进行编译。现在我将发布我遇到的错误。它们是:
1>e:\c++ 语言 2\格式正确的表达式检查器解决方案\格式正确的表达式检查器项目\main.cpp(11):警告 C4101:"n":未引用的局部变量
1>e:\c++ 语言 2\格式正确的表达式检查器解决方案\格式正确的表达式检查器项目\main.cpp(11):警告 C4101:"N":未引用的局部变量
1>e:\c++ 语言 2\格式正确的表达式检查器解决方案\格式正确的表达式检查器项目\main.cpp(22):警告 C4700:使用未初始化的局部变量"answerswer"
1>ManifestResourceCompile:1> 所有输出都是最新的。
1>main.obj : 错误 LNK2019: 函数_main中引用的未解析的外部符号 "public: int __thiscall StackLS::top(void)const " (?top@StackLS@@QBEHXZ
)1>main.obj : 错误 LNK2019: 函数 _main 中引用的未解析外部符号"public: void __thiscall StackLS::p ush(int const &)" (?push@StackLS@@QAEXABH@Z
)1>E:\C++ 语言 2\格式良好的表达式检查器解决方案\调试\格式正确的表达式检查器项目.exe:致命错误LNK1120:2 个未解析的外部
感谢您的帮助。
警告就是——警告。它们不会阻止您的程序编译,但您应该查看它们并尝试修复它们。
你的程序实际上编译正常;错误使它无法链接。这意味着,在您的代码被编译成机器代码并构建到*.exe
文件中之后,事实证明缺少一些部分。看起来StackLS.h
文件附带一个C++源文件,或者一个 *.lib 或 *.dll 文件;无论您拥有什么,都需要在构建可执行文件时包含这些内容,以提供这些缺失的部分。
它已经编译,你得到了一些关于未使用变量的警告。链接失败,因此您缺少的是实现 StackLS 的文件。
仅包含标头并不能使它们"实现"。
所以你需要类似的东西 StackLS.cpp 或类似
你没有发布那个。
问题(可能)不在于您的代码,而在于您调用编译器/链接器的方式。
您需要编译定义int StackLS::top() const
和void StackLS::push(int const &)
的源文件,并在链接可执行文件时将结果提供给链接器。
你的程序使用了一个名为StackLS的库。这可以是预编译库或某些源代码。
您可以使用 #include "StackLS.h"
添加对此库的引用,以允许编译器编译您的代码。这将创建代码的编译版本。
下一阶段是将编译的代码与编译的 StackLS 库链接。 这是链接器的工作。如今,同一个程序(编译器)通常也会进行执行此步骤所需的所有调用(尽管您可以链接自己),尽管从技术上讲,这是编译的不同步骤。
如果 StackLS 是你的代码,那么你也必须编译它,或者如果它是一个预编译库,你需要告诉链接器在哪里可以找到它。
在 make 文件中,您需要添加对 StackLS 源代码或库的引用(在这种情况下,它通常是 .dll 或 .lib 类型的文件)。
删除以下行:
字符 n, N;堆栈LS堆栈;
看看你怎么走。
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- 未解析的外部符号_MsiLocateComponentW@12.
- 在C++中使用 gRPC 时未解析的外部符号
- LibPrivoxy: 未解析的外部符号 __declspec(dllimport) int __stdcall Sta
- 尝试从 XamlApplication 编译 C++/WinRT 空白应用程序时,我收到未解析的外部符号 winrt_make_*
- 我收到错误LNK2001:未解析的外部符号(C++代码)
- 可视抽象类 c++(错误 LNK 2001:未解析的外部符号)
- 如何摆脱C++中未解析的外部符号"private: static char"错误?
- 当 lib 已添加到其他依赖项时,如何在 VS 中调试未解析的外部符号错误
- 仅在少数方法(静态或共享库)中解析的外部符号
- 未解析的外部符号"__declspec(dllimport)与 Spdlog c++ 库
- 函数 _main (OPENGL C++) 中引用的未解析的外部符号 ________
- 错误LNK2019未解析的外部符号"public: __thiscall SLinkList<char>::SLinkList<char>(void)"
- 使用静态 constexpr 成员的未解析外部符号
- 引入参数化构造函数后显示 LNK 2019 未解析外部符号的代码错误
- Dlib LNK2001未解析的外部符号USER_ERROR__consistent_build_configurati
- 矛盾的未解决的外部符号+未使用的库与VS2017和FFMPEG 4
- 链接器错误:切换到unicode生成给出:未解析的外部符号WinMain
- 类模板上一个特定函数的未解析外部符号
- LNK2001:未解析的外部符号public:static类std::vector