首页 > 解决方案 > 通过作为指向 C++ 中的函数的指针传递来访问 std::array 元素的正确方法是什么?

问题描述

代码片段如下。错误出现在 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);
}

标签: c++c++14

解决方案


由于运算符优先级,*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;
}

此外,您不需要typedef struct DataType { ... } DataType;在 C++ 中使用。你可以只使用struct DataType { ... };


推荐阅读