2016-09-30 10 views
-1

なぜ0引数を取らない関数についてコンパイラからthis errorが得られますか?それが呼び出された後に関数を宣言するからですか?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

.NETライブラリからスワップを呼び出すメインの上に、あなたの関数を定義してみたりするだけmain.Itの上に宣言します。 –

+4

'using namespace std'を避けて、同じ名前のファウンダリを定義してください... – Jarod42

+5

これはあなたのコードで' using namespace std; '行で焼いてしまったからです。コンパイラが 'swap'をどこから得るのでしょうか? – PaulMcKenzie

答えて

4

それが呼び出された後、私は関数を宣言するのでされますか?

はい。

コンパイラがswap()への呼び出しを見るまでには、まだあなたの機能についてはわかりません。あなたは通常、この場合、 "宣言されていない関数への呼び出し"の行に沿ってエラーを表示します。using namespace stdディレクティブであなたの名前空間に引っ張ったのはstd::swap(2つの引数をとります)ではありませんでした。それは

int swap(); 

main上に専用の宣言を入れて、それを(関数定義は常に、関数宣言であるように)main上方swapの定義を移動するか残す:固定するために

。私はまた、using namespace std;を取り除きました。ご覧のように、あなたよりも害が大きくなる可能性があり、代わりにすべての標準ライブラリタイプと関数に接頭辞std::を明示的に付け加えます。しかしそれは必須ではなく、あなたの現在の問題の根本的な原因でもありません。

1

は、あなたがそれを使用する前に、すべてを宣言する必要があり、今

関連する問題