我收到一个错误消息,说我的表达式必须有一个指向类类型的指针,我试图为对象向量动态分配一个指针数组。
void dmaArr(Record*** sortedRec, vector<Record> records) {
//sortedRec = nullptr;
*sortedRec = new Record *[records.size()];
cout << *sortedRec << endl << sortedRec << endl;
for (int i = 0; i < records.size(); i++) {
*sortedRec[i] = &records[i];
cout << sortedRec[i]->name << '\t' << &sortedRec[i]->name << endl;
}
在cout
语句中,sortedRec[i]
的类型为Record**
,不能与指针取消引用运算符一起使用。您可以使用(*sortedRec[i])->name
获取刚刚分配的记录的名称字段。
[偶然地,因为您按值传递了records
,所以存储在for循环中的所有指针都指向该临时对象,并且一旦函数返回,它们将处于危险状态。您应该通过引用传递records
:vector<Record> &records
以避免这种情况。
sortedRec
是Record***
,因此sortedRec[i]
是Record**
。您不能使用->
运算符取消对指针到指针的引用。就像在*
循环中一样,您需要使用Record*
运算符将其取消引用到单个for
指针中。然后,您可以使用->
运算符取消引用Record*
指针以访问Record
实例的成员,例如: