2015-04-08 126 views
0

對於我的編程類的賦值,出現此錯誤: 錯誤1錯誤C2664:'binarySearch':無法將參數1從'int'轉換爲'INT []' 行34無法將參數1從'int'轉換爲'int []'

#include<iostream> 
using namespace std; 

int selectionSort(int[], int); 
int binarySearch(int[], int, int); 
int sorted; 

int main() 
{ 
    int size; 
    int i; 
    int desirednum; 

    cout << "How many values do you want to enter?"; 
    cin >> size; 

    int* userarray = 0; 
    userarray = new int[size]; 

    for (i = 0; i < size; i++) 
    { 
     cout << "Enter a value: "; 
     cin >> userarray[i]; 
    } 

    int sorted = selectionSort(userarray, size);//calls the selection sort  function 

    cout << "What value are you looking for: ";//asks what value they are searching for 
    cin >> desirednum; 

    int location = binarySearch(sorted, size, desirednum); 


    delete[] userarray; 
    return 0; 
} 

int selectionSort(int numbers[], int size) 
{ 
    int i, j, min, minidx, temp, desirednum, sorted = 0; 
    cout << "What value are you looking for: "; 

    cin >> desirednum; 
    for (i = 0; i < (size - 1); i++) 
    { 
     min = numbers[i]; 
     minidx = i; 
     for (j = i + 1; j < size; j++) 
     { 
      if (numbers[j] < min) 
      { 
       min = numbers[j]; 
       minidx = j; 
      } 
     } 
     if (min < numbers[i]) 
     { 
      temp = numbers[i]; 
      numbers[i] = min; 
      numbers[minidx] = temp; 
      sorted++; 
     } 
    } 
    return sorted; 
} 

int binarySearch(int& user_array, int amount, int value) 
{ 
    int left, right; 
    int* middle; 
    left = 0; 
    right = amount - 1; 
    while (left <= right) 
    { 
     middle = (int*)((left + right)/2); 
     if (value == user_array[middle]) 
     { 
      return *middle; 
     } 
    } 
} 

回答

1

您的簽名(聲明)是

int binarySearch(int[], int, int); 

但是你的定義是:

int binarySearch(int& user_array, int amount, int value) 

這是不一樣的。 user_array只是參考int。你想要一個數組(或一個指針)。

撇開,amount是相當誤導。 size會更加準確和典型。

下面是預期的語法和使用的一個示例:

void printArray(int array[], int size) { 
    for(int i = 0; i < size; ++i) { 
     std::cout << array[i]; 
    } 
} 

// Usage 
int array[] = {1,2,3}; 
printArray(array, 3); 

注意,參數的類型是int[],而不是int&(這僅是一個int的引用)。您也可以使用int*

+0

O.k.所以我已經將大小的變量數量轉換出來了。但是,如何修正聲明聲明,我拿出了符號符號但仍然不起作用。 – AaronBeta

+0

@AaronBeta您需要與'binarySearch'中的聲明具有相同的定義,即用int int binarySearch(int user_array [],int amount,int value)替換int binarySearch(int&user_array,int amount,int value) ' – vsoftco

+0

@AaronBeta,查看更新。 – Kat

0

我還沒有看過C++,但是我可以告訴你的binarysearch()函數,你傳入一個int而不是一個整數數組。您將變量「sorted」作爲第一個參數傳遞給binarysearch。 「sorted」被聲明爲int並被分配了selectionsort函數的返回值。 selectionsort()用int的返回類型定義。

我認爲主要問題是你應該傳遞變量「userarray」作爲binarysearch()的第一個參數。查看名稱,如果第一個參數爲binarysearch()。

從selectionsort(sorted)返回的值似乎只是一個計數器,記錄了爲了執行選擇排序必須發生多少次交換。如果你不需要這些信息(我沒有看到這個變量的使用),那麼你可以使選擇一個void函數。

編輯 - 此外(感謝邁克),我只是注意到函數聲明與定義的區別。

相關問題