c++ - 通过作为指向 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);
}
解决方案
由于运算符优先级,*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 { ... };
推荐阅读
- json - Laravel Eloquent 模型 JSON 输出格式
- xaml - Xamarin:通过引用后面的代码设置多个视图模型
- math - Python 3 中是否有一个函数可以获取任意数的质因数?
- go - 在 Windows 上使用 go mod 安装 go buffalo 有困难
- css - 取消最后一条CSS规则的效果
- python - 子命令和默认值的 Python argparse 顺序
- entity-framework - EF 不会使用 SQLite 从数据库生成每个模型
- r - 如何在已发布的 Power BI 上指示外部 R 代码的路径?
- sql - 从表1中获取值并在jsp中插入表2
- apache-spark - 具有组间聚合结果的 Pyspark 窗口