2016-04-20 12 views
1

ImをC++に新規作成し、今すぐコースを通過します。関数間で変数を渡すことはできません

私は雄牛と雌牛をコーディングすると私の言葉のゲームを推測します。

私はコードを完成させましたが、私が望むように動作しませんでした。

2つの関数間で変数を渡そうとすると失敗します。

は、コードのthats:

#include <iostream> 
#include <string> 

using namespace std; 

void PrintIntro();   <-- the function that passes the variable 
void PlayGame();   <-- the function trying to get the vriable 
string PlayersGuess(); 

int main() 
{ 
    // Printing the Intro and Instrations of the game 
    PrintIntro(); 
    // Function to play our game 
    PlayGame(); 

    return 0; // exits the application 
} 

    void PrintIntro() 
    { 
     // introduce the game 
     constexpr int WORD_LENGTH = 5; 
     cout << "Welcome to Bulls and Cows" << endl; 
     cout << "Can you guess the " << WORD_LENGTH << " letter word I'm thinking of?" << endl; 
     cout << endl; 
     PlayGame(WORD_LENGTH);  <-- Taking the variable 
     return; 
    } 

    string PlayersGuess() 
    { 
     // get a guess from the player 
     cout << "Enter your guess: "; 
     string Guess = ""; 
     getline(cin, Guess); 
     cout << endl; 
     return Guess; 
    } 

    void PlayGame(const int &passed) <-- passing through here 
    { 
     // Game Intro 
     for (int i = 0; i < passed; i++)  <-- to here 
     { 
      // Players Guess 
      string Guess = PlayersGuess(); 
      cout << "Your guess is: " << PlayersGuess() << endl; 
      cout << endl; 
     } 
    } 

結果は失敗であり、それは「機能が1つの引数を取りません」と言うが、それを渡すための正しい方法は何ですか?

答えて

0

関数が引数を取るようにするには、引数を取るようにコンパイラに指示する必要があります。

関数プロトタイプ宣言

void PlayGame(); 

PlayGame機能が引数を取らず、とは値を返さないコンパイラに指示します。宣言と一致しない引数を使用して呼び出すと、エラーが発生します。一方

、あなたの定義のようにそれを宣言した場合:

void PlayGame(const int &passed); 

、あなたが機能引数(定数intへの参照を)取らなければならない、とすることができますコンパイラに伝えます引数なしで関数を呼び出さないでください。

渡された引数(またはその不足)によって異なる動作が必要な場合は、2つの解決方法があります。関数のオーバーロードまたはデフォルトの引数。

例えば、同じ名前の2つの異なる機能を持つことができますが、の署名はそれぞれ(基本的に異なる引数)です。

void PlayGame() { ... } 
void PlayGame(int passed) { ... } 

は、次に(右前方宣言して)あなたが最初の関数が呼び出されます、その場合には引数なしのいずれかで、または第二の関数が呼び出されます、その場合には整数値でそれを呼び出すことができます。あなたはその引数が渡される引数を持つ関数を呼び出す場合

使用してデフォルト引数あなたは次に

void PlayGame(int passed = 0) { ... } 

ような何かを行うことができ、あなたは(私の例では0)引数なしのデフォルト値を渡した場合使用されます。

また、定数参照部分を削除しました。これは、単純なint値では本当に必要ではありません。

このすべては、any good bookで明確に説明されています。

+0

ありがとうございましたが、今私は主な機能に何を書き込むべきですか? playgame()もあり、何も返す必要はありません。ここに同じものを書いてください。 – Kiper

+0

私はこれをC++シェル(ccp.sh)で試してみましたが、 "1:43:エラー: '<'トークンの前にunqualified-idが必要です。 'int main()':"。修正が必要なコードについて他にも何かありますか? –

+0

編集していただきありがとうございます。今はもっとたくさん!私自身も見ていきますが、C++の人でも、あなたの今の提案から上記のコードを動作させることができるかどうかを見てください! :〜) –

0

関数の宣言と定義のシグネチャが一致している必要があります。

void PlayGame(const int &passed); 

あなたのコードには、PlayGameという名前の2つの異なる機能があります。 PlayGame()がパラメータとともに呼び出された瞬間に、コンパイラは適切な関数をまだ満たしていないので、エラーが返されます。

+0

私はこれをC++シェル(ccp.sh)で試してみましたが、 "1:43:エラー: '<'トークンの前にunqualified-idが必要です。 'int main()':"修正が必要なコードについて他にも何かありますか? –

+0

@PeterDavidCarterさて、この関数のすべての呼び出しは**の**パラメータでなければなりません –

+0

Ah、ok。 C++は私の強みではありません。私はC#について多くのことを読んだ後、すぐに大学でPascalをやって、Javaで遊んでいましたが、C++を見たことはありませんでした。誰もがそれらを知っていると思う答え、推測で:〜)。 –

1

変更宣言:

void PlayGame() 

へ:

void PlayGame(const int &passed) 
+0

私はこれをC++シェル(ccp.sh)で試してみましたが、 "1:43:error: '<'トークンの前にunqualified-idが必要です。 'int main()':"修正が必要なコードについて他にも何かありますか? –

1

宣言void PlayGame();最初はパラメータを受け付けません。宣言を、必要な型のacceptパラメータに変更します。宣言と定義は一致する必要があります。お役に立てれば。

関連する問題