2014-10-28 2 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이 (이중 [])' '더블 [] 오류는 여기 ---> reverseOrder에'더블 '로부터 인수 한 변환 할 수있다 (배열 [크기]);데이터 유형 충돌

+0

아아. 이것은 너무 냉담하고, 무례하고, 무례하며 유치하며 우습다. 질문조차하지 않은 질문에 대한 답을 얻을 수 있다고 생각하는 이유는 무엇입니까? Pro-Advice : 자주 FAQ를 먼저보십시오 ... –

+0

왜 컴파일을 원하지 않습니까? --force-to-compile 지시문을 사용하십시오. – 4pie0

+1

'main()'에서 당신은'reverseOrader (array [size]) '를 호출했습니다. 이는 배열 요소를 전달하고 있지만 함수는 배열 요소를 기다리고 있음을 의미합니다. 'reverseOrder (array)'를 시도하십시오. – alvits

답변

0

array[size]과 함께 함수 reverseOrder(double[])을 호출하는 것은 배열 (*)의 한 요소 일뿐입니다. 그래서 당신은 double을 전달하지만 함수는 배열을 기대합니다.

귀하의 경우에는 reverseOrder(array)으로 함수를 호출해야합니다.

(*)는 첫 번째 요소는 0에 액세스 등 4 실제로 5 요소에 액세스 할 (덕분에 있기 때문에 마지막 하나는 후 요소 를 가리키는 때문에이 경우에는 심지어 요소하지 않습니다)

+0

*** 배열의 하나의 요소 *** 실제로 c/C++는 0 기반 인덱싱을 사용하기 때문에 어레이/UB 외부의 요소입니다. – drescherjm

+0

수정. 그에 따라 대답을 편집 할 것입니다. –

0

귀하의 특정 문제 (우리가 관찰 할 수있는 것과 단지 첫 번째를) 것을 지적 drescherjm는 double의의 배열을 기대 함수에 하나의 double을 통과하려고하는 것입니다. 그 이유는

은 주어진 인덱스와 연결된 배열의 값을 반환하기 때문입니다 (reverseOrder(array);과 같아야 함). 즉, 인덱스가 허용 범위 내에 있으면이 값을 반환합니다. 이것은 array [size]가 배열의 마지막 요소를 지나서 하나이기 때문에 여기서는 해당되지 않습니다. 마지막 것은 인덱싱 된 배열 [size-1]입니다. 따라서 정의되지 않은 동작이 발생합니다.