代码段如下。错误是在cout行的foo函数中:

typedef struct Datatype {
    int first;
    int second;
} Datatype;

void foo(std::array<Datatype, 100>* integerarray){
    cout << *integerarray[0].first << endl; //ERROR: has no member first
}

void main() {
    std::array<Datatype, 100> newarray;
    for(int i=0; i<100; i++)
        newarray[i] = i;
    }
    foo(&newarray);
}

最佳答案

由于运算符的优先级,*integerarray[0].first转换为*(integerarray[0].first),这不是您想要的。您需要使用(*integerarray)[0].first

cout << (*integerarray)[0].first << endl;

通过传递引用可以简化您的生活。
void foo(std::array<Datatype, 100>& integerarray){
  cout << integerarray[0].first << endl;
}

另外,您无需在C++中使用typedef struct DataType { ... } DataType;。您可以只使用struct DataType { ... };

关于c++ - 通过作为C++函数的指针传递来访问std::array元素的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52286681/

10-13 08:27