计算器.cpp:48:24:错误:从 'char' 到 'const char*' 的转换无效 [-允许]
Calculator.cpp:48:24: error: invalid conversion from 'char' to 'const char*' [-fpermissive]
这是我的披露:我正在做一个学校项目,我使用链接堆栈来实现后缀计算器。
我今天的问题是,我在我的代码中得到一个奇怪的(对我来说)错误,我似乎无法绕过。随着时间的推移,我能弄清楚的逻辑是,我需要做的是这些语法上的事情(我认为通过练习,这将是自然而然的)。
无论如何,我想知道是什么导致这个错误,为什么。根据我的研究,它与字符串和字符比较有关,但这是我知识的极限。
更新:我在代码中出现的错误旁边添加了一些星号
我在学校的编译器上得到的错误块如下:
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]
我的代码在我的计算器类(计算器。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]
返回一个字符,而不是字符串。
还有很多地方你可以混合使用字符和字符串
相关文章:
- 将 const 转换为 const char* 无效,我该如何解决?使用 gcc7 时失败
- 类型"int"和"const char [15]"到二进制"运算符<<"的无效操作数^
- 错误:从'void*'到'const uint8_t* {aka const unsigned char*}'的转换无效 [-允许]
- 错误:从 'char' 到 'const char' [-允许] strcat(加密,密钥[i])的转换无效;
- C++ - 从 "int" 到 "unsigned char" 的缩小转换无效
- 错误:AES 加密密钥:从"char*"到"无符号字符"的转换无效
- 无法确定为什么函数调用中从 char* 到 char 的无效转换
- 我收到一个错误无效的操作数,类型为 const char [42] 和二进制"运算符+"的双倍数
- 在 sprintf 中从 'signed char*' 到 'char*' 的转换无效
- 在这个简单函数中从'char'到'const char*'的无效转换
- 'const char [26]' 和 'LPSTR ' 类型的无效操作数
- C++从 'const char*' 到 'char*' Arduino Uno 的无效转换
- 如何修复C++中的"错误:从'int'到'const char*'[-fallowive]的无效转换?
- 将文本文件读取为 const char* 有时有效,有时无效
- C++:"错误:类型'const char*'和'const char [28]'的操作数无效到二进制'ope
- C++错误:从"char"到"const char*"的转换无效[-允许]
- 从'const char**'到'char* const*'的转换无效
- 从 'char' 到 'char*' strcat 函数的转换无效
- 使用表达式初始化char*无效
- 简单的 int 到字符串转换..int to const char* 无效