3

まず第一に、これは私の初めてのコード作成の1つなので、私は初心者です。

私はdevkitproを使用してndsのために書いているので、すべてc++で書かれています。メニューが欲しいのですが、各メニュー画面が空いていて、前のメニューに戻る方法が必要です。

また、実際のコードで構文エラーがないことを確認しました(このスコープで宣言されていない場合は構文エラーと見なされます)。

「エラー'設定'がこのスコープで宣言されていません」を取得せずにこれを行うにはどうすればよいですか。コード:

    //Headers go here

    void controls()
    {
                                 //Inits and what not go here
            if (key_press & key_down) 

    /*This is generally how you say if the down key has been pressed (This syntax might be wrong, but ignore that part)*/
            {
            settings(); //This part doesn't work because it can't read back in the code
            }

    }
    void settings()
    {
                                 //Inits and what not go here
            if (key_press & key_down) 
            {
            controls();
            }

    }
    void mainMenu()
    {
                 //Inits and what not go here
            if (key_press & key_down) 
            {
                    settings();
            }
    }

また、このコードの外のどこかで、mainMenu()がアクティブ化されることに注意してください。それで、誰かがこれを正しくコーディングする方法を知っていますか?

前もって感謝します。

4

5 に答える 5

3

関数呼び出しの時点では、コンパイラはこの関数について何も知りません。コンパイルで関数を認識させるには、宣言定義の2つの方法があります。

関数を宣言するには、関数の概要(関数の引数と戻り値)をこのようにコンパイルモジュールの先頭に配置する必要があります。

void settings(void);

問題を修正するsettings()には、最初に呼び出す前に関数を宣言する必要があります。

あなたの場合、おそらくファイルの先頭で関数を宣言する必要があります。このようにして、コンパイラは、渡される必要のある関数と引数を認識します。

void settings();

void controls()
{
...
}
void settings()
{
...
}
void mainMenu()
{
...
}

開始していくつかの追加の詳細を取得するための良い記事:msdnでの宣言と定義

于 2013-03-04T17:00:48.597 に答える
1

簡単な修正は、次のようにsettings()前に前方宣言を追加することです。controls()

void settings() ;

完全なコード:

//Headers go here

void settings() ;

void controls()
{
                             //Inits and what not go here
        if (key_press & key_down) 

/*This is generally how you say if the down key has been pressed (This syntax might be wrong, but ignore that part)*/
        {
        settings(); //This part doesn't work because it can't read back in the code
        }

}
void settings()
{
                             //Inits and what not go here
        if (key_press & key_down) 
        {
        controls();
        }

}
void mainMenu()
{
             //Inits and what not go here
        if (key_press & key_down) 
        {
                settings();
        }
}

この前のスレッドC++も参照してください-前方宣言

于 2013-03-04T17:03:23.360 に答える
0

settings()ローカル関数です。定義にのみ呼び出すことができます。定義を上に移動するcontrols()か、ヘッダーファイルを介して利用できるようにします。

于 2013-03-04T17:02:39.523 に答える
0

問題は、settings()がcontrols()の後に宣言され、controlsがsettings()を呼び出そうとしていることです。ただし、settings()はまだ存在しないため、存在できません。

settings()の定義をcontrols()の定義の前に移動するか、settings()の前方宣言をcontrols()の前に行うことができます。

void settings(); //forward declaration
void controls() { 
  .....
}
void settings() {
  .... 
}
于 2013-03-04T17:03:28.397 に答える
0

最初にヘッダーファイルでsettings()を宣言しましたか?また、これらのメソッドがヘッダーファイルで宣言されている場合のように、クラス名または名前空間にメソッドをスコープすることはありません。

いずれにせよ、ヘッダーファイルが必要ない場合は、書き込む順序を変更してください。使用する前にsettings()を定義してください。

于 2013-03-04T17:03:29.410 に答える