【问题标题】:How to call struct from separate function?如何从单独的函数调用结构?
【发布时间】:2014-01-14 03:21:08
【问题描述】:
#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 中。

【问题讨论】:

  • guy[i] 的目的是什么?如果你希望能够对struct workers应用下标运算符,当然你需要定义它,编译器已经说得很清楚了。
  • 你想要/期望check_something做什么?
  • 我的错..我忘记了 void 什么也没返回,它现在似乎工作了! :-) 非常感谢您的帮助。

标签: c++ arrays function parameters struct


【解决方案1】:

main 中,people 是一个数组。您访问它的ith 元素people[i] 并尝试将其传递给函数局部变量guy 位置的check_something。然后,您尝试取消引用 guy - 这不是一个数组,而是单个对象实例。

int main()
{
    workers people[5];  // <-- array

...

    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]);

可以,或者你可以通过

void check_something(workers* people, workers& guy) {
    check_id(people, guy);
}

---- 编辑----

您的 check_ID 函数中还有一个类似 python 的错误。

   if(people[i].ID == guy.ID)
        return true;
        break;

在 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;

(因为return是要退出函数,后面也说break也没有意义)

【讨论】:

  • 我声明了workers guy = people[i];,当我用check_ID(people, guy)调用函数时,它仍然什么都不做(不做它的功能)。这是为什么?我还尝试将people[i] 作为第二个参考,但它仍然没有输出任何内容。
  • workers guy = people[i]people[i] 复制到一个名为guy 的临时局部变量中。
  • 另外,您的“check_ID”功能已损坏,因为您有一个始终执行的“中断”。
  • 更新了我的答案以包括 check_ID/return/break 的事情。
  • 非常感谢您的帮助!我真的应该开始在任何地方使用 {},即使我猜它是一行代码。
【解决方案2】:

workers 没有重载的下标运算符,guy 也不是数组。因此你不能在上面调用[]。在guy 之后创建一个数组或删除[i]

check_ID(people, guy); //delete [i]

【讨论】:

  • 我确实尝试过 guy,但它什么也没做.. 它通过函数,调用 check_ID,但 check_ID 什么也没做,我猜是因为那个家伙没有价值或什么?
【解决方案3】:

Guy 是参考,而不是指针。您不能在引用上使用 operator[]。

【讨论】:

    猜你喜欢
    • 2019-10-05
    • 1970-01-01
    • 2018-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多