1

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

#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): warning C4700: uninitialized local variable 'answer' used

1>ManifestResourceCompile: 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

谢谢您的帮助。

4

5 回答 5

3

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

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

于 2012-04-18T04:11:23.563 回答
1

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

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

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

你没有发布那个。

于 2012-04-18T04:12:41.253 回答
0

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

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

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

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

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

于 2012-04-18T04:16:24.673 回答
0

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

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

于 2012-04-18T04:13:21.213 回答
-1

删除行:

字符 n, N; StackLS 堆栈;

看看你怎么走。

于 2012-04-18T04:13:43.300 回答