【问题标题】:What does 'Error LNK2019: unresolved external symbol' mean?“错误 LNK2019:未解析的外部符号”是什么意思?
【发布时间】:2012-04-18 04:07:17
【问题描述】:

我正在尝试运行一个程序,但它无法编译,我得到了错误。我已经改变了一些东西,但似乎没有用。代码是这样的:

#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. 1>e:\c++ language 2\well-formed expression checker solution\well-formed expression checker project\main.cpp(11): warning C4101: 'n' : unreferenced local variable

  2. 1>e:\c++ language 2\well-formed expression checker solution\well-formed expression checker project\main.cpp(11): warning C4101: 'N' : unreferenced local variable

  3. 1>e:\c++ language 2\well-formed expression checker solution\well-formed expression checker project\main.cpp(22):警告 C4700:使用了未初始化的局部变量“answer”

1>清单资源编译: 1> 所有输出都是最新的。

  1. 1>main.obj : 错误 LNK2019: 函数 _main 中引用的未解析的外部符号“public: int __thiscall StackLS::top(void)const” (?top@StackLS@@QBEHXZ)

  2. 1>main.obj: 错误 LNK2019: 函数 _main 中引用的未解析外部符号“public: void __thiscall StackLS::push(int const &)”(?push@StackLS@@QAEXABH@Z)

  3. 1>E:\C++ language 2\Well-Formed Expression Checker Solution\Debug\Well-Formed Expression Checker Project.exe : 致命错误 LNK1120: 2 unresolved externals

感谢您的帮助。

【问题讨论】:

  • 从编译器错误消息中,我猜 1) n 是未引用(未使用)的局部变量,2) N 是未引用的局部变量,3) answer在初始化之前使用。对于初学者,我建议删除未使用的本地变量并初始化 answer
  • 这些是警告;错误来自链接器。看起来您没有正确链接 StackLS 库。
  • Lea - 请把你的 makefile 也粘贴到这里。
  • “Makefile”是使用“真实”编译器构建程序的指令。 Visual C++ 不使用它们。

标签: c++


【解决方案1】:

警告就是——警告。它们不会阻止您的程序编译,但您应该查看它们并尝试修复它们。

您的程序实际上可以编译;错误使其无法链接。这意味着在您的代码被编译成机器代码并被构建到*.exe 文件中之后,结果发现有些部分丢失了。看起来StackLS.h 文件似乎带有 C++ 源文件或 *.lib 或 *.dll 文件;无论您拥有什么,都需要在构建可执行文件时包含这些内容,以提供那些缺失的部分。

【讨论】:

  • 我确实在 main.cpp 的标头中包含了 stackLS.h 文件。我也有一个 stackLS.cpp。
  • 对。我要说的是 stackLS.cpp 要么 (1) 不包含在项目中,所以链接器找不到它,或者 (2) 如果你自己写了这个,也许是在*.h 文件未在 *.cpp 文件中实现;特别是,top()push() 函数具有链接器错误中提到的签名。
  • 好的,我在文件夹中有stackLS.cpp 文件和其他文件。我不确定,但也许这是你说的第二件事,但我不确定如何判断它是否是和/或如何解决它。
  • 那么,StackLS.cpp 中的方法 void push(int const &amp;) 有定义吗?
  • 好的,你去!我们不知道 StackLS 涉及模板。简单的解释是模板定义需要在实例化时可见,否则代码不会生成。我不能确切地告诉你你得到了什么,但最简单和最灵活的解决方法就是将模板类的整个定义移动到头文件中:这通常是模板类的完成方式。
【解决方案2】:

它已经编译,你得到了一些关于未使用变量的警告。 链接失败,因此您缺少的是实现 StackLS 的文件。

仅包含标题并不会使它们“实现”。

所以你需要类似的东西 StackLS.cpp 之类的

你还没有发布。

【讨论】:

  • 我确实有一个stackLS.cpp 文件。我在main.cpp 中包含了stackLS.h 文件
  • 然后你必须编译它并将它添加到链接器命令行。 g++ Main.o StackLS.o -o my_program 应该做的事情
【解决方案3】:

问题(可能)不在于您的代码,而在于您调用编译器/链接器的方式。

您需要编译定义int StackLS::top() constvoid StackLS::push(int const &amp;) 的源文件,并将结果提供给链接器,在链接您的可执行文件时。

【讨论】:

    【解决方案4】:

    您的程序使用了一个名为 StackLS 的库。这可能是预编译的库或一些源代码。

    您使用#include "StackLS.h" 添加对该库的引用,以允许编译器编译您的代码。这将创建您的代码的编译版本。

    下一阶段是将已编译的代码与已编译的 StackLS 库链接起来。这是链接器的工作。如今,同一个程序(编译器)通常也会进行执行此步骤所需的所有调用(尽管您可以链接自己),尽管从技术上讲,这是编译的不同步骤。

    如果 StackLS 是你的代码,那么你也必须编译它,或者如果它是一个预编译的库,你需要告诉链接器在哪里可以找到它。

    在您的 make 文件中,您需要添加对 StackLS 源代码或库的引用(在这种情况下,它通常是 .dll 或 .lib 类型的文件)。

    【讨论】:

      【解决方案5】:

      删除线:

      字符 n, N; StackLS 堆栈;

      看看你怎么走。

      【讨论】:

        猜你喜欢
        • 2012-10-31
        • 2012-08-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多