2015-03-07 5 views
-1

Итак, вот мой код. Это говорит мне, что раздел не объявлен, когда я вызываю его в kSmall ... Любые идеи?Функция не объявлена ​​в этой области?

int kSmall(int A[], int k, int low, int high){ 
    int pivot = A[(low+high)/2]; 
    int idx = partition(A, pivot, low, high); 
    if(idx-low+1>k) 
     kSmall(A,k,low,idx-1); 
    else if(idx-low+1<k) 
     kSmall(A,k,idx+1,high); 
    else 
     return A[idx]; 
} 

int partition(int A[], int p, int low, int high){ 
    int temp; 
    int left = low; 
    int right = high; 
    while (left < right){ 
     while (A[left]<p) 
      left++; 
     while (A[right]>p) 
      right--; 
     if (left<right){ 
      temp = A[left]; 
      A[left] = A[right]; 
      A[right] = temp; 
      } 
    } 
    return left; 
} 

Точная ошибка: main.cpp: 36: 43: ошибка: 'partFunc' не был объявлен в этой области

ответ

0

Если определить раздел() перед kSmall() в вашем CPP файле магистральный .cpp проблема будет решена.

+0

@ user3434233 Если это помогает, пожалуйста, примите ответ – Steephen

+0

, изучая C++, я также попытаюсь изменить метод, но если вы havemany метод, вы будете сумасшедшим.haha Я забыл этот термин, но я думаю, что вы можете определить все вашего метода до фактических блоков кода метода, чтобы вы не беспокоились, ваш метод вызова уже определен. @ user3434233 –

+0

@ Nin-ya предыдущая декларация является обязательной, поэтому, если вы определяете функцию перед ее использованием, это объявление и определение – Steephen

0

Перед функцией, в которой вы ее вызываете, вы должны объявить функцию partition().

Просто добавьте эту строку:

int partition(int[], int, int , int); 

перед тем kSmall. Это связано с тем, что kSmall() вызывает раздел(), он дает ошибку, поскольку перед ним нет функции partition(), поэтому вы можете либо определить функцию перед ней, либо просто предоставить прототип.

Смежные вопросы