217 18 D:\新医大\数据结构\实验三 T1 2023年5月28日.cpp [Error] request for member 'parent' in 'qu->SqQueue::data[i]', which is of non-class type 'int'怎么修改
时间: 2024-02-13 21:05:51 浏览: 113
这个错误提示的意思是说,你在一个非类类型的变量 `int` 上使用了成员访问操作符 `->`,而 `->` 只能用于类类型的指针或者结构体类型的指针上。所以,你需要检查一下你的代码中是否有这样的错误。
根据错误提示,你的问题出现在 `qu->data[i].parent` 这行代码上,因为 `qu->data[i]` 是一个 `int` 类型的变量,不是一个类类型的变量,所以不能使用 `->`。
假设你的 `SqQueue` 结构体类型定义中包含一个成员变量 `data`,类型为 `int` 数组,那么你需要将 `qu->data[i].parent` 改为 `qu->data[i]`,就可以解决这个问题了。
修改后的代码如下:
```c++
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
#define MAXSIZE 1000
typedef struct SqQueue {
int data[MAXSIZE];
int front, rear;
} SqQueue;
void InitQueue(SqQueue *qu) {
qu->front = 0;
qu->rear = 0;
}
bool isEmpty(SqQueue *qu) {
return qu->front == qu->rear;
}
bool EnQueue(SqQueue *qu, int x) {
if ((qu->rear + 1) % MAXSIZE == qu->front) {
return false;
}
qu->data[qu->rear] = x;
qu->rear = (qu->rear + 1) % MAXSIZE;
return true;
}
bool DeQueue(SqQueue *qu, int &x) {
if (isEmpty(qu)) {
return false;
}
x = qu->data[qu->front];
qu->front = (qu->front + 1) % MAXSIZE;
return true;
}
int main() {
SqQueue *qu = new SqQueue;
InitQueue(qu);
int n, m;
cin >> n >> m;
int parent[n + 1], child[n + 1];
memset(parent, 0, sizeof(parent));
memset(child, 0, sizeof(child));
for (int i = 0; i < m; i++) {
int x, y;
cin >> x >> y;
parent[y]++;
child[x]++;
}
for (int i = 1; i <= n; i++) {
if (parent[i] == 0) {
EnQueue(qu, i);
}
}
while (!isEmpty(qu)) {
int x;
DeQueue(qu, x);
cout << x << " ";
for (int i = 1; i <= n; i++) {
if (qu->data[i] == x) {
child[i]--;
if (child[i] == 0) {
EnQueue(qu, qu->data[i]); // 修改这行代码,将 qu->data[i].parent 改为 qu->data[i]
}
}
}
}
cout << endl;
return 0;
}
```
阅读全文