D:\Statistics\Stack_Order\main.c|83|warning: assignment to 'DataType *' {aka 'int *'} from incompatible pointer type 'SqStack *' {aka 'struct stack *'} [-Wincompatible-pointer-types]|
时间: 2023-05-21 11:05:52 浏览: 104
这个警告说明在第83行的代码中,将一个类型为'SqStack *'的指针赋值给了类型为'DataType *'的指针,这两种类型是不兼容的,因此编译器会发出警告。可能需要检查代码并进行类型转换才能避免这个警告。
相关问题
Accepted 2.05215ms 404KiB foo.cc: In function 'std::string infixToPostfix(std::string)': foo.cc:19:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare] 19 | for (int i = 0; i < expression.length(); i++) { | ~~^~~~~~~~~~~~~~~~~~~~~
感谢您提供的提示。警告是由于在 `for` 循环中,将 `int` 类型的 `i` 与 `expression.length()` 的返回类型 `std::__cxx11::basic_string<char>::size_type` 进行比较,两者类型不同导致的。
为了解决这个警告,您可以将 `i` 的类型更改为与 `expression.length()` 返回类型相同的类型,即 `std::__cxx11::basic_string<char>::size_type`。修改后的代码如下:
```cpp
#include <iostream>
#include <stack>
#include <string>
using namespace std;
int precedence(char op) {
if (op == '+' || op == '-')
return 1;
if (op == '*' || op == '/')
return 2;
return 0;
}
string infixToPostfix(string expression) {
string postfix = "";
stack<char> stk;
stk.push('#');
for (std::__cxx11::basic_string<char>::size_type i = 0; i < expression.length(); i++) {
char c = expression[i];
if (isalnum(c)) {
postfix += c;
} else if (c == '(') {
stk.push('(');
} else if (c == ')') {
while (stk.top() != '#' && stk.top() != '(') {
postfix += stk.top();
stk.pop();
}
stk.pop();
} else {
while (stk.top() != '#' && precedence(c) <= precedence(stk.top())) {
postfix += stk.top();
stk.pop();
}
stk.push(c);
}
}
while (stk.top() != '#') {
postfix += stk.top();
stk.pop();
}
return postfix;
}
int main() {
string expression;
cin >> expression;
string postfix = infixToPostfix(expression);
cout << postfix << endl;
return 0;
}
```
通过将 `i` 的类型更改为 `std::__cxx11::basic_string<char>::size_type`,可以消除警告。
请再次运行代码,看看警告是否消失。如果您还有其他问题,请随时提问。
LEGEND: STACK | HEAP | CODE | DATA | RWX | RODATA
LEGEND: STACK | HEAP | CODE | DATA | RWX | RODATA是用来表示不同内存区块的缩写标记。其中,STACK代表栈空间,HEAP代表堆空间,CODE代表代码段,DATA代表数据段,RWX代表可读、可写、可执行的空间,RODATA代表只读的数据段。这些标记通常用于描述程序的内存布局,以帮助理解程序的运行机制。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [realloc函数UAF利用|攻防世界pwn进阶区supermarket](https://blog.csdn.net/weixin_43092232/article/details/105014161)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]