2014-10-28 131 views
-5
#include <iostream> 
#include <iomanip> 

using namespace std; 

void reverseOrder (double []); 

int main() { 

    const int size = 4; 

    double array[size] = {1.2, 6.7, -12.45, 34.9}; 

    cout << "Forwards:" << " " << endl; 

    for (int index = 0; index < size; index++) { 
     cout << array[index] << endl; 
    } 

    // Display in reversed order. 
    cout << "Backwards: " << endl; 
    reverseOrder(array[size]); 

    return 0; 
} 

void reverseOrder(double array[]) { 

    const int size = 10; 
    int j; 
    double reverseOrder[size]; 
    double temp = 0; 

    for (int i = 0, j = size - 1; i < (size/2); i++, j--) { 
     temp = reverseOrder[i]; 
     reverseOrder[i] = array[j]; 
     reverseOrder[j] = temp; 
    } 

    for (int reverse = 0; reverse < size; reverse++) { 
     cout << array[reverse] << endl; 
    } 
} 

錯誤C2664: '無效reverseOrder(雙[])':不能從 '雙' 轉換參數1至 '雙[]' 誤差是這裏---> reverseOrder(數組[大小] );數據類型衝突

+0

Argh。這是如此傲慢,粗魯,不尊重和幼稚,這很有趣。是什麼讓你以爲你會得到一個甚至沒有被問到的問題的答案?建議:至少先看FAQ ...... – 2014-10-28 22:48:57

+0

爲什麼不想編譯?使用--force-to-compile指令 – 4pie0 2014-10-28 22:50:45

+1

在'main()'中調用'reverseOrader(array [size])'這意味着你正在傳遞一個數組的元素,但是你的函數需要一個元素數組。嘗試'reverseOrder(array)'。 – alvits 2014-10-28 22:51:17

回答

0

您正在使用array[size]作爲參數調用函數reverseOrder(double[]),該參數只是數組(*)的一個元素。所以你傳遞一個double,但是函數需要一個數組。

在你的情況下,你應該調用reverseOrder(array)函數。 (*)在這種情況下,它甚至不是一個元素,因爲它指向最後一個元素之後的元素,因爲第一個元素被0訪問,所以4訪問第5個元素(感謝drescherjm指出了這一點)

+0

***它只是數組中的一個元素***實際上它是數組/ UB之外的元素,因爲c/C++使用基於0的索引。 – drescherjm 2014-10-28 22:54:29

+0

正確。我將相應地編輯答案。 – 2014-10-28 22:56:32

0

你的具體問題(剛剛從什麼,我們可以看到第一個)是你想一個double傳遞給期待陣列的double小號功能。這是因爲

array[index] 

返回與給定索引相關聯的數組值(您應該將其稱爲reverseOrder(array);)。也就是說,只要索引處於允許的範圍內,它就會返回。這裏不是這種情況,因爲array [size]是數組中最後一個元素的值。最後一個是索引數組[size-1]。因此,您遇到未定義的行爲