使用指针和矢量时没有匹配"*"错误的运算符

No operator matches "*" error when using pointers and vectors

本文关键字:错误 运算符 指针      更新时间:2023-10-16

尝试使用指向函数的指针传递向量,但是我收到错误:

E0349   no operator "*" matches these operands

很确定我也引用正确,所以我不确定为什么会发生这种情况。

代码如下:

public:
SortingData Sort(vector<double> *newVect, int arraySize, char choice)
{
clock_t timer;
double duration;
cout << "Insertion Sort:" << endl;
int i, key, j;
if (choice == 'a')
{
timer = clock();
for (i = 1; i < arraySize; i++) {
key = *newVect[i];
j = i - 1;

checks++;
while (j >= 0 && *newVect[j] > key) {
checks++;
*newVect[j + 1] = *newVect[j];
j = j - 1;
swaps++;
}
swaps++;
*newVect[j + 1] = key;
cout << *newVect[i] << " ";
}
}
else if (choice == 'd')
{
timer = clock();
for (i = 1; i < arraySize; i++) {
key = *newVect[i];
j = i - 1;

checks++;
swaps++;
while (j >= 0 && *newVect[j] < key) {
checks++;
*newVect[j + 1] = *newVect[j];
j = j - 1;
swaps++;
}
*newVect[j + 1] = key;
}
}

duration = (clock() - timer) / (double)CLOCKS_PER_SEC;
for (int i = 0; i < arraySize; i++)
{
cout << *newVect[i] << " ";
}
cout << endl;
cout << "Checks: " << checks << endl;
cout << "Swaps: " << swaps << endl;
cout << "Time to complete: " << duration;
return {"Insertion Sort",checks,swaps,duration};
}
};

以下是我调用该函数的方式:

returnedData[2] = insertionSort.Sort(&data, elementTotal, orderChoice);

订阅运算符[]的优先级高于取消引用运算符*(例如,请参阅此引用)。因此,*newVect[i]*(newVect[i])相同,这在这里毫无意义。因此,您必须在此处编写(*newVect)[i]以便首先取消对矢量的指针的引用,然后再对其应用订阅运算符[i]

错误发生在哪里?这是您访问矢量项目的地方吗?

尝试(*newVect)[i]首先取消引用指向矢量的指针,然后访问矢量中的索引。

索引运算符[]的优先级高于取消引用运算符*。因此,当你写*newVect[i]时,它首先尝试访问指针中的第 i 个元素(即向量数组中的第 i 个向量,这可能会导致运行时错误),然后取消引用该元素。但它不能,因为newVect[i]属于vector<double>类型,您无法取消对*运算符的引用。

也许,如果您需要将可修改的向量传递给方法,则最好传递引用而不是指针。

SortingData Sort(vector<double> &newVect, int arraySize, char choice)

并称它为像

returnedData[2] = insertionSort.Sort(data, elementTotal, orderChoice)

然后,当您使用矢量并访问元素时,您无需取消引用指针。

您也可能不需要传递arraySize参数,因为vector::size()返回向量中的元素数。