表达式必须在C 中具有指针对象类型

Expression must have pointer-to-object type in C++

本文关键字:指针 对象 类型 表达式      更新时间:2023-10-16

我试图事先查找它,但似乎没有用。我只是想发挥功能,显然在dotpropoduct下的int i错误。有人知道为什么会发生这种情况吗?

 #include <iostream>
 #include <string>
 using namespace std;
int main()
{
    int inp,i,v,array1,array2,oo,test1;
    // Checking the input of the array size
    do {
        cout << "Enter Array size: ";
        cin >> inp;
        if (inp <= 0)
            cout << "Incorrect array size. Try Again n";
    } while (inp <= 0);
    int *arr1;
    int *arr2;
    arr1 = new int[inp];
    arr2 = new int[inp];
    // Populating the arrays
    cout << "-----Begin Entering Array Elements-------- n";
    cout << "Array 1: n";
    for (i = 0; i <= (inp - 1); i++)
    {
        cout << "Enter element: ";
        cin >> v;
        arr1[i] = v;
    }
    cout << "Array 2: n";
    for (i = 0; i <= (inp - 1); i++)
    {
        cout << "Enter element: ";
        cin >> v;
        arr2[i] = v;
    }
    // The dot product function
    int dotProduct(int *array1, int *array2, int size);
    {
        int sum = 0;
        for (int i = 0; i <= (inp - 1); i++)
        {
            oo = ((*array1[i]) * (*array2[i]));
            sum = sum + oo;
        }
    }
    test1 = dotProduct(arr1, arr2, inp);
    cin.get();
    cin.ignore();
    return 0;
}

您的功能以半隆结束:

int dotProduct(int* parray1, int *parray2, int size);

因此仅使其成为声明。而且它在main()函数内部也是错误的。下标运算符[]已经进行了删除,因此不需要两次退出,应为:

array1[i] * array2[i]

最后,您的功能需要返回sum,并且for条件需要更改为:

for (int i = 0; i < size; i++)

您应该在主机中为arr1;arr2分配的delete。这是该功能的外观:

int dotProduct(int *array1, int *array2, int size) {
    int sum = 0;
    for (int i = 0; i < size; i++) {
        sum += array1[i] * array2[i];
    }
    return sum;
}