使用指针和矢量时没有匹配"*"错误的运算符
No operator matches "*" error when using pointers and vectors
尝试使用指向函数的指针传递向量,但是我收到错误:
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()
返回向量中的元素数。
相关文章:
- 在运算符重载定义中使用成员函数(const错误)
- 逻辑运算符上出现错误代码 a')'
- 错误 C2679:二进制"<<":未找到采用类型 'std::string_view' 的右侧操作数的运算符(或者没有可接受的转换)
- C++:需要帮助了解运算符重载错误
- 我在 .h 中有一个枚举类,并且在.cpp错误中有一个运算符重载:与"运算符<<不匹配
- C++分数混合比较运算符错误
- 为什么我收到错误:"运算符<<不匹配?
- 迭代器类的重载前缀增量运算符会引发分段错误
- 在 boost::qi 中使用过多的替代运算符会导致分段错误
- 调用运算符时出现链接器错误<<,如何解决?
- 错误:表达式必须具有算术、无作用域枚举或带有运算符重载的指针类型
- 解决错误:运算符 [] 不匹配
- 提升错误:"运算符=="的重载不明确
- 字符串输入中没有匹配的错误运算符错误
- 错误:运算符 = IN C++ 不匹配
- QT 创建器错误(运算符 + 不匹配)
- 错误C++运算符重载
- 错误:运算符==不匹配
- C++ 语法和编译器错误 - 运算符不匹配<<
- C++错误--运算符=不匹配