2016-09-30 4 views
-1

Почему я получаю this error от компилятора о функции, не принимающей 0 аргументов? Это потому, что я объявляю функцию после ее вызова?Функция C++ не принимает 0 аргументов

// HelloWorld.cpp : Defines the entry point for the console application. 
// 

#include "stdafx.h" 
#include <iostream> 


using namespace std; 

int main() 
{ 
    cout << "Hello World!\n"; 
    cout << "Game over!\n"; 
    swap(); 
    system("pause"); 
    return 0; 
} 

int swap() 
{ 
    int on = 1; 
    int off = 0; 
    int temp = on; 
    on = off; 
    off = temp; 
    return 0; 
} 

enter image description here

+2

Вы должны объявить все, прежде чем использовать его. –

+4

Избегайте «использования пространства имен std» и определяйте фразу с тем же именем ... – Jarod42

+5

Это связано с тем, что вы сожгли строку 'using namespace std;' в вашем коде. Угадайте, откуда компилятор получает 'swap'? – PaulMcKenzie

ответ

4

Является ли это потому, что я объявляю функцию после того, как она была вызвана?

Да.

К тому времени, когда компилятор видит звонок swap(), он еще не знает о вашей функции. В этом случае вы обычно получаете ошибку в соответствии с «вызовом необъявленной функции», если бы не std::swap (который принимает два аргумента), которые вы потянули в свое пространство имен директивой using namespace std.

Для того, чтобы исправить: Переместить определение swapвышеmain (как определение функции всегда и объявление функции) или оставить его там, где он является поставить специальную декларацию

int swap(); 

выше main , Я также избавился бы от using namespace std;, поскольку он, как вы можете видеть, может принести вам больше вреда, чем пользы, и вместо этого префикс всех типов и функций стандартной библиотеки явно с std::. Но это не является обязательным, а также не является основной причиной вашей текущей проблемы.

1

Попробуйте определение вашей функции на верхней части основной или просто объявить на вершине main.It теперь называет своп из .net библиотеки