- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是我的披露:我正在做一个学校项目,在该项目中我使用链接堆栈来实现后缀计算器。
我今天的问题是我的代码中出现了一个奇怪的(对我来说)错误,我似乎无法解决。随着时间的推移,我可以弄清楚的逻辑是我需要处理的这些句法问题(而且我认为通过练习会自然而然地出现)。
无论如何,我想知道导致此错误的原因以及原因。根据我的研究,它与字符串和字符比较有关,但这是我知识的限制。
更新:我在代码中出现的错误旁边添加了一些星号
我在学校的编译器上得到的错误 block 如下:
In file included from Calculator.h:35:0,
from CalculatorMain.cpp:6:
Calculator.cpp: In member function 'void Calculator::performOp(const string&)':
Calculator.cpp:48:24: error: invalid conversion from 'char' to 'const char*' [-fpermissive]
/opt/csw/lib/gcc/i386-pc-solaris2.10/4.6.3/../../../../include/c++/4.6.3/bits/basic_string.tcc:214:5: error: initializing argument 1 of 'std::basic_string<_CharT, aits, _Alloc>::basic_string(const _CharT*, const _Alloc&) [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>]' [-fpermissive]
Calculator.cpp:52:30: error: invalid conversion from 'char' to 'const char*' [-fpermissive]
/opt/csw/lib/gcc/i386-pc-solaris2.10/4.6.3/../../../../include/c++/4.6.3/bits/basic_string.tcc:214:5: error: initializing argument 1 of 'std::basic_string<_CharT, aits, _Alloc>::basic_string(const _CharT*, const _Alloc&) [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>]' [-fpermissive]
Calculator.cpp:53:101: error: invalid conversion from 'char' to 'const char*' [-fpermissive]
/opt/csw/lib/gcc/i386-pc-solaris2.10/4.6.3/../../../../include/c++/4.6.3/bits/basic_string.tcc:214:5: error: initializing argument 1 of 'std::basic_string<_CharT, aits, _Alloc>::basic_string(const _CharT*, const _Alloc&) [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>]' [-fpermissive]
Calculator.cpp:57:27: error: invalid conversion from 'char' to 'const char*' [-fpermissive]
/opt/csw/lib/gcc/i386-pc-solaris2.10/4.6.3/../../../../include/c++/4.6.3/bits/basic_string.tcc:214:5: error: initializing argument 1 of 'std::basic_string<_CharT, aits, _Alloc>::basic_string(const _CharT*, const _Alloc&) [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>]' [-fpermissive]
Calculator.cpp:60:23: error: ISO C++ forbids comparison between pointer and integer [-fpermissive]
Calculator.cpp:61:27: error: invalid conversion from 'char' to 'const char*' [-fpermissive]
/opt/csw/lib/gcc/i386-pc-solaris2.10/4.6.3/../../../../include/c++/4.6.3/bits/basic_string.tcc:214:5: error: initializing argument 1 of 'std::basic_string<_CharT, aits, _Alloc>::basic_string(const _CharT*, const _Alloc&) [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>]' [-fpermissive]
Calculator.cpp:64:23: error: ISO C++ forbids comparison between pointer and integer [-fpermissive]
我的计算器类中的代码(对于 calculator.cpp。头文件是单独的):
** @file Calculator.cpp */
#include <string>
#include <cassert>
#include "Calculator.h"
Calculator::Calculator(){
} // end default constructor
bool Calculator::isOperator(const string& newEntry) {
string ops[] = {"-", "+", "/", "*"};
for (int i = 0; i < 4; i++) {
if (newEntry == ops[i]) {
return true;
}
}
return false;
}
bool Calculator::isOperand(const string& newEntry) {
if (!isOperator(newEntry) && newEntry != "(" && newEntry != ")") {
return true;
}
return false;
}
int Calculator::compareOps(const string& op1,const string& op2) {
if ((op1 == "*" || op1 == "/") && (op2 == "+" || op2 == "-")) {
return -1;
}
else if ((op1 == "+" || op1 == "-") && (op2 == "*" || op2 == "/")) {
return 1;
}
return 0;
}
void Calculator::performOp(const string& userExpression) {
string temp = userExpression;
int i = 0;
cout << "Error log: User expression is now " << temp << endl;
while(temp[i] > temp.length()) {
cout << "Error log: begin while loop" << endl;
**if (isOperand(temp[i])) {**
postfixString += temp[i];
}
else if **(isOperator(temp[i]))** {
**while (!infixStack.isEmpty() && infixStack.peek() != "(" && compareOps(infixStack.peek(), temp[i]) <= 0) {**
postfixString += infixStack.peek();
infixStack.pop();
}// end while
infixStack.push(temp[i]);
}
**else if (temp[i] == "(") {**
infixStack.push(temp[i]);
}
**else if (temp[i] == ")") {**
while (!infixStack.isEmpty()) {
if (infixStack.peek() == "(") {
infixStack.pop();
break;
}
postfixString += infixStack.peek();
infixStack.pop();
}//end while
}//end last else if
i++;
}//end while
while(!infixStack.isEmpty()) {
postfixString += infixStack.peek();
infixStack.pop();
}
cout << "The Postfix form of your expression is: " << postfixString << endl;
}
这是我测试这个类的文件:
#include <iostream>
#include <string>
#include "Calculator.h"
using namespace std;
int main()
{
Calculator aCalculator;
string userString = "1+1";
cout << "Testing the Link-Based Stack:" << endl;
aCalculator.performOp(userString);
return 0;
} // end main
最佳答案
您的某些函数需要字符串,但您传递的是单个字符。例如,isOperator
应该是:
bool Calculator::isOperator(char newEntry) {
char ops[] = {'-', '+', '/', '*'};
for (int i = 0; i < 4; i++) {
if (newEntry == ops[i]) {
return true;
}
}
return false;
}
因为您这样调用它:isOperator(temp[i])
并且 temp[i]
返回一个字符,而不是一个字符串。
还有许多其他地方需要混合使用字符和字符串。
关于c++ - 计算器.cpp :48:24: error: invalid conversion from 'char' to 'const char*' [-fpermissive],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22600541/
我不断得到: ../src/stack.cpp: In function ‘int main()’: ../src/stack.cpp:34:28: error: invalid conversion
#include #include #include #include 我需要有关此代码的帮助。我的编译器一直要求我使用 -fpermissive 选项,但我不知道在哪里输入它。我粘贴了下面的
我正在尝试使用 pthreads 将 Leibniz 的总和并行化以近似 PI。当我使用最新版本的 g++ 运行此代码时,会出现这两个错误,我真的不明白为什么,我正在这样编译:g++ pi2.cpp
我有一个 C 单头库,我想在我的 C++ 项目中使用它。通常,我只需包含该文件就可以了,因为 C++ 几乎是 C 的超集。但是,该库有一个跳过初始化的 goto,这违反了C++ 标准。 我可以通过在
#include #include using namespace std; typedef bool (*compare)(int,int); void SelectionSort(int *i
我正在尝试构建一个非循环树结构,每个节点都由一个字符串标识,每个分支节点都是 PrimMap 类型。同一代的所有节点都保存为 map 中的 Item 对象。这是缩写代码: class PrimMap
我知道这个问题已经回答了。但我只是想确认一下我的理解。 这是我的代码片段。来自this . #include using namespace std; class Base { void a
我写了下面的代码示例,我不得不使用 -fpermissive 来跳过错误/警告 #include #include using namespace std; int endOfProgram(){
我只是想知道 -fpermissive 标志在 g++ 编译器中的作用是什么?我得到: error: taking address of temporary [-fpermissive] 我可以通过将
我定义了两个不同的typedef结构:datatype_2d_1和datatype_2d_2,它们基本上都有两个 double 作为成员,但它们的定义不同。现在我有一个变量数据类型 z1 和一个指针
我正在使用 NDK (Android) 在 C++ 中构建一个库。输出告诉我一些代码被标记为错误,但可以通过使用 -fpermissive 标志来抑制。至少在我看来是这样。输出是: MyClass.c
我正在尝试构建一个带有静态数据成员的模板类,但当我尝试编译以下代码时收到此错误消息: |In instantiation of ‘T& T::t’:| 16|required from here| 1
我是 c++ 的新手,在 ubuntu 上使用 eclipse cdt 并在我的头文件中收到此错误: initializing argument 1 of 'std::map,Supplier*> E
我的想法是检查这个 dll 是否有我需要的版本,或者它是旧的还是新的?我正在尝试使用 THUNK/Trampoline 函数。 这是我在另一个 *.dll 文件中的用法。 int FilterVers
为什么编译器会在指示的行报错? class C { std::string s; public: C() { s = "";} ~C() {} void Set(con
我有一个类Cache,它的函数 write 指定为 bool write(const MemoryAccess &memory_access, CacheLine &cl); 我这样调用这个函数。 c
我在这个控制台应用程序中使用 Qt 4.5.1,当我想在 if 语句 行接收用户输入时,它收到此错误: iso c++ forbids comparison between pointer and i
我有一个数组,其大小在运行时确定。 cout>size1; int* scores=new int[size1]; 然后我填写这个数组分数。现在我想增加它的大小。我创建了一个新的动态数组。 int*
代码 int cycle_length(int i, int j) { int cycleLength = 0; for (int k = i; k cycle_length) {
我有以下代码: int Array::getSize(){ //do something } Movie Array::getMovie(int i){ //do something }
我是一名优秀的程序员,十分优秀!