C++ “没有运算符匹配”*&引用;使用指针和向量时出错

C++ “没有运算符匹配”*&引用;使用指针和向量时出错,c++,pointers,vector,C++,Pointers,Vector,试图使用指向函数的指针传递向量,但收到错误: E0349 no operator "*" matches these operands 我很确定我引用的也是正确的,所以我不确定为什么会发生这种情况 代码如下: public: SortingData Sort(vector<double> *newVect, int arraySize, char choice) { clock_t timer; double duration; cout <&l

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

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};
 }
};

订阅运算符
[]
的优先级高于取消引用运算符
*
(例如,请参见参考)。因此,
*newVect[i]
*(newVect[i])
相同,这在这里没有意义。因此,您必须在此处写入
(*newVect)[i]
,以便在对向量应用订阅运算符
[i]
之前,首先取消对向量的指针的引用。

错误发生在何处?它是你访问向量项的地方吗

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

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

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

SortingData Sort(vector<double> &newVect, int arraySize, char choice)
然后,在使用向量和访问元素时,不需要取消对指针的引用


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

返回数据和参数
数据的声明在哪里?@ClickRick返回数据和数据参数的声明发生在调用函数之前,但它们没有问题,因为函数在没有指针的情况下工作,您可以避免不使用传递指针的问题使用引用的唯一问题是,我有多个类和函数,它们具有不同的排序算法,当我出于某种原因同时运行它们时,我引用的实际向量没有得到排序,这就是我没有得到排序的原因,这就是为什么我尝试使用指针并得出这个结论错误。如果我理解正确,您希望在同一输入上运行不同的排序算法。但是如果你传递一个指向原始向量的指针,你将遇到与传递引用相同的问题。如果要保留原始向量,则必须在将其传递给排序方法之前进行复制(或在排序方法内部进行复制)。
SortingData Sort(vector<double> &newVect, int arraySize, char choice)
returnedData[2] = insertionSort.Sort(data, elementTotal, orderChoice)