2015-01-31 2 views
1

Я недавно начал возиться с аннулируются и столкнулся с проблемойработы с пустотой в первый раз

это мой код:

#include <iostream> 
using namespace std; 

void smallSort(); 

int main() 
{ 
    int num1, num2, num3; 
    cout << "Please enter the first number" << endl; 
    cin >> num1; 
    cout << "Please enter the second number" << endl; 
    cin >> num2; 
    cout << "Please enter the third number" << endl; 
    cin >> num3; 
    cout << "Now I will sort from smallest to biggest!" << endl; 

    smallSort(); 
    return 0; 
} 

void smallSort(int& num1, int& num2, int& num3){ 
    if(num1 > num2) 
     swap(num1, num2); 
    if(num1 > num3) 
     swap(num1, num3); 
    if(num2 > num3) 
     swap(num2, num3); 

    cout << num1 << " " << num2 << " " << num3 << endl; 
} 

Я пытался добавить параметры в smallSort в основном, но в нем говорится, что слишком много аргументов. Я также попытался удалить параметры из пустоты, но это тоже не сработало. Любые советы или что-нибудь, я могу прочитать было бы здорово, спасибо

+2

Если у вас есть аргументы в функции, вам действительно нужно передать аргументы при вызове функции. Также обратите внимание, что поскольку вы программируете C++, функции 'void smallSort()' и 'void smallSort (int & num1, int & num2, int & num3)' являются * not * той же самой функцией. Подробнее о перегрузке функций. Фактически, первый равен «void smallSort (void)» (т. Е. Функция, принимающая * no * аргументы). –

+0

Обратите внимание, что поскольку вы объявляете функцию 'smallSort' без принятия аргументов и вызываете' smallSort' без аргументов, вы не получаете ошибку компилятора, вместо этого вы получаете ошибку * linker *, говорящую о том, что 'smallSort' не определен , И это, потому что вы не определяете функцию 'smallSort', не принимающую никаких аргументов. И это то место, где вы должны искать и читать о различии между * декларацией * и * определением *. –

+0

Получите 'cout' из функции (функция должна быть функцией). Переместите его по вызову 'smallSort()'. Это принцип программирования. Он не будет исправлять вашу текущую проблему, но это облегчит вашу жизнь. Например, с 'cout', где он находится, вы можете реорганизовать, удалив' & 's (удаление' & 'не будет иметь никакого поведенческого влияния. –

ответ

4

Ваше определение функции не соответствует его заявление:

void smallSort(); // <== zero args 
void smallSort(int& num1, int& num2, int& num3){ // <== three args 

Те должны соответствовать точно. Ваше заявление должно быть изменено на:

void smallSort(int&, int&, int&); 

Также вы на самом деле не вызывающихsmallSort с любыми аргументами:

smallSort(); 

должен быть:

smallSort(num1, num2, num3); 
+0

Это всего лишь первый бит (декларация) , что вызвало проблемы. Все это приводит к тому, что это приводит к ошибкам многих аргументов. –

+0

@richard Вызов также явно неверен. – Barry

+0

Звонок является частью всего остального. Это приводит к первой ошибке. Это также приводит к слишком большому количеству ошибок компилятора. –

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