sortedRec
是a
Record***
,所以
sortedRec[i]
是a
Record**
.你不能用
->
运算符,用于取消指针对指针的引用。你需要使用
*
操作符改为取消引用
记录**
指针指向单个指针
Record*
指针,就像你在你的
for
循环。然后,您可以使用
->
操作员取消引用
记录*
访问成员的指针
Record
实例,例如:
cout << (*sortedRec[i])->name << endl;
话虽如此,在C++中,你很少需要像现在这样使用3级间接性(
Record*** sortedRec
).
不管怎样
sortedRec
通过,
records
应通过引用传递,以便
dmaArr()
不按
复制
呼叫者的
vector<Record>
,离开
sortedRec
当
复制
在以下情况下被销毁
dmaArr()
出口:
void dmaArr(..., vector<Record> &records)
然后,你可以
并且应该
替换上的一级指针间接性
sortedRec
通过使用引用而不是指针:
void dmaArr(Record** &sortedRec, vector<Record> records) {
sortedRec = new Record *[records.size()];
for (size_t i = 0; i < records.size(); ++i) {
sortedRec[i] = &records[i];
cout << sortedRec[i]->name << endl;
}
...
}
vector<Record> records;
Record** sortedRecords;
// populate records as needed...
dmaArr(sortedRecords, records);
// use sortedRecords as needed...
delete [] sortedRecords;
然后,你可以
并且应该
替换上的另一层指针间接性
sortedRec
通过使用
std::vector
而不是
new[]
.让
std::矢量
为您管理动态内存,特别是因为调用者已经在使用
std::矢量
无论如何:
void dmaArr(vector<Record*> &sortedRec, vector<Record> &records) {
sortedRec.resize(records.size());
for (size_t i = 0; i < records.size(); ++i) {
sortedRec[i] = &records[i];
cout << sortedRec[i]->name << endl;
}
...
}
vector<Record> records;
vector<Record*> sortedRecords;
// populate records as needed...
dmaArr(sortedRecords, records);
// use sortedRecords as needed...