#include <iostream>
#include <cmath>
using namespace std;
struct workers{
int ID;
string name;
string lastname;
int date;
};
bool check_ID(workers *people, workers &guy);
void check_something(workers *people, workers &guy, int& i);
int main()
{
workers people[5];
for(int i = 0; i < 5; i++){
cin >> people[i].ID;
cin >> people[i].name;
cin >> people[i].lastname;
cin >> people[i].date;
if(check_ID(people, people[i]) == true)
cout << "True" << endl;
else
cout << "False" << endl;
check_something(people, people[i], i);
}
return 0;
}
bool check_ID(workers *people, workers &guy){
for(int i = 0; i < 5; i++){
if(people[i].ID == guy.ID)
return true;
break;
}
return false;
}
void check_something(workers *people, workers &guy, int& i){
check_ID(people, guy[i]);
}
这是我的代码,这不是很好的例子,但我很快写了它来代表我的问题,因为我的项目有点太大了。所以基本上,我想从一个不同的函数调用struct,我收到这个错误:
这一行error: no match for 'operator[]' in guy[i]
:
函数check_ID(people, guy[i]);
中的check_something
。
答案 0 :(得分:5)
在main
中,people
是一个数组。您可以访问i
的{{1}}元素,并尝试将其传递给函数局部变量people[i]
位置的check_something
。然后尝试取消引用guy
- 这不是数组,而是单个对象实例。
guy
...
int main()
{
workers people[5]; // <-- array
VS
check_something(people /* <-- people */, people[i] /* <-- guy */, i /* <-- i */);
你实际上在第一个参数中传递了数组,人物。你这里不需要“伙伴”,因为它是void check_something(workers *people, workers &guy, int& i){
check_ID(people, guy[i] /* <-- array access on single instance*/);
,不是吗?所以你可以这样做:
people[i]
或只是
void check_something(workers *people, int& i){
worker& guy = people[i];
check_ID(people, guy);
或
会起作用,或者你可以传递
void check_something(workers *people, int& i){
check_ID(people, people[i]);
----编辑----
你的check_ID函数中也有类似python的错误。
void check_something(workers* people, workers& guy) {
check_id(people, guy);
}
在Python中,这说:
if(people[i].ID == guy.ID)
return true;
break;
你想要的是
if people[i].ID == guy.ID:
return True
break
或只是
if ( people[i].ID == guy.ID ) {
return true;
break;
}
(因为返回将退出该函数,之后也没有说断裂)
答案 1 :(得分:0)
workers
没有重载的下标运算符,guy
也没有数组。因此,您无法在其上调用[]
。在[i]
之后创建数组或删除guy
。
check_ID(people, guy); //delete [i]
答案 2 :(得分:0)
Guy是一个引用,而不是指针。您不能在引用上使用运算符[]。