我正在尝试运行程序,但它不会编译,我会收到错误。我改变了一些东西,但似乎没有用。代码是这样的:
#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&gt; e:\ c ++语言2 \格式良好的表达式检查器解决方案\格式正确的表达式检查程序项目\ main.cpp(11):警告C4101:'n':未引用的局部变量
1&gt; e:\ c ++语言2 \格式良好的表达式检查器解决方案\格式正确的表达式检查程序项目\ main.cpp(11):警告C4101:'N':未引用的局部变量
1&gt; e:\ c ++语言2 \格式正确的表达式检查器解决方案\格式正确的表达式检查程序项目\ main.cpp(22):警告C4700:未初始化的本地变量'answer'used
1&GT; ManifestResourceCompile: 1 GT;所有输出都是最新的。
1&gt; main.obj:错误LNK2019:未解析的外部符号“public:int __thiscall StackLS :: top(void)const”(?top @ StackLS @@ QBEHXZ)在函数_main中引用
< / LI>1&gt; main.obj:错误LNK2019:函数_main中引用的未解析的外部符号“public:void __thiscall StackLS :: push(int const&amp;)”(?push @ StackLS @@ QAEXABH @ Z) / p>
1&gt; E:\ C ++语言2 \ Well-Form ed Expression Checker解决方案\ Debug \ Well-Formed Expression Checker Project.exe:致命错误LNK1120:2个未解析的外部
感谢您的帮助。
答案 0 :(得分:3)
警告只是 - 警告。它们不会阻止您的程序编译,但您应该查看它们并尝试修复它们。
你的程序实际编译好了;错误使其不能链接。这意味着在将代码编译成机器代码并将其构建到*.exe
文件中之后,事实证明缺少某些部分。看起来好像StackLS.h
文件带有C ++源文件或* .lib或* .dll文件;无论你拥有什么,在构建可执行文件时都需要包含这些内容,以提供那些缺失的部分。
答案 1 :(得分:1)
它已编译,你有一些关于未使用的变量的警告。 链接失败了,所以你缺少的是实现StackLS的文件。
仅包含标题不会使它们“实现”。
所以你需要类似的东西 StackLS.cpp之类的
你没有张贴。
答案 2 :(得分:0)
问题是(可能)不是您的代码,而是您调用编译器/链接器的方式。
您需要编译定义了int StackLS::top() const
和void StackLS::push(int const &)
的源文件,并在链接可执行文件时将结果提供给链接器。
答案 3 :(得分:0)
您编写了一个名为StackLS的库。这可以是预编译库或一些源代码。
使用#include "StackLS.h"
添加对此库的引用,以允许编译器编译代码。这将创建代码的编译版本。
下一步是将已编译的代码与已编译的StackLS库链接。这是Linker的工作。现在,相同的程序(编译器)通常也会执行此步骤所需的所有调用(尽管您可以链接自己),但从技术上讲,这是编译的不同步骤。
如果StackLS是您的代码,那么您也必须编译它,或者如果它是预编译库,您需要告诉链接器在哪里找到它。
在make文件中,您需要添加对StackLS源代码或库的引用(在这种情况下,它通常是.dll或.lib类型文件)。
答案 4 :(得分:-1)
删除行:
char n,N; StackLS堆栈;
看看你怎么走。