2017-11-26 15 views
0
#include <iostream> 
#include <string> 
#include "windows.h" 
#include "Submenu.h" 
using namespace std; 




class Mainmenu 
{ 
string Menu[3]; 
string MenuName1; 
string MenuName2; 
string MenuName3; 
int pointer = 0; 

public: 
Mainmenu(string m1, string m2, string m3); 
void Firstmenu(); 
}; 

Mainmenu::Mainmenu(string m1, string m2, string m3) 
{ 
MenuName1 = m1; 
MenuName2 = m2; 
MenuName3 = m3; 
} 
void Mainmenu::Firstmenu() 
{ 
string Menu[3] = { MenuName1,MenuName2,MenuName3 }; 
while (true) 
{ 

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 15); 
    cout << "basemenu\n\n"; 

    for (int i = 0; i < 3; ++i) 
    { 
     if (i == pointer) 
     { 
      SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 11); 
      cout << Menu[i] << endl; 
     } 
     else 
     { 
      SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 15); 
      cout << Menu[i] << endl; 
     } 
    } 

    while (true) 
    { 
     if (GetAsyncKeyState(VK_UP) != 0) 
     { 
      pointer -= 1; 
      if (pointer == -1) 
      { 
       pointer = 2; 
      } 
      break; 
     } 
     else if (GetAsyncKeyState(VK_DOWN) != 0) 
     { 
      pointer += 1; 
      if (pointer == 3) 
      { 
       pointer = 0; 
      } 
      break; 
     } 

     else if (GetAsyncKeyState(VK_RETURN) != 0) 
     { 
      switch (pointer) 
      { 

      case 0: 
      { 

       system("cls"); 
       Submenu1 a("aa", "bb", "exit"); 
       a.Sub_one(); 


      }break; 

      case 1: 
      { 

      } 
      break; 

      case 2: 
      { 
       exit(1); 
      } 
      break; 


      } 

      break; 
     } 





    } 
    Sleep(150); 
    system("cls"); 
} 
} 

C++これは相互参照エラーですか?この


#include <iostream> 
#include <string> 
#include "windows.h" 
#include "Mainmenu.h" // ERROR C1014 

using namespace std; 

class Submenu1 
{ 
string Menu[3]; 
string SubName1; 
string SubName2; 
string SubName3; 
int pointer = 0; 
public: 
Submenu1(string s1, string s2, string s3); 
void Sub_one(); 
Mainmenu *a; 
}; 

Submenu1::Submenu1(string s1, string s2, string s3) 
{ 
SubName1 = s1; 
SubName2 = s2; 
SubName3 = s3; 
} 

void Submenu1::Sub_one() 
{ 
string Menu[3] = { SubName1, SubName2, SubName3 }; 

while (true) 
{ 



    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 15); 
    cout << "submenu 1\n\n"; 

    for (int i = 0; i < 3; ++i) 
    { 
     if (i == pointer) 
     { 
      SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 11); 
      cout << Menu[i] << endl; 
     } 
     else 
     { 
      SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 15); 
      cout << Menu[i] << endl; 
     } 
    } 




    while (true) 
    { 
     if (GetAsyncKeyState(VK_UP) != 0) 
     { 
      pointer -= 1; 
      if (pointer == -1) 
      { 
       pointer = 2; 
      } 
      break; 
     } 
     else if (GetAsyncKeyState(VK_DOWN) != 0) 
     { 
      pointer += 1; 
      if (pointer == 3) 
      { 
       pointer = 0; 
      } 
      break; 
     } 




     else if (GetAsyncKeyState(VK_RETURN) != 0) 
     { 
      switch (pointer) 
      { 


      case 0: 
      { 

      }break; 

      case 1: 

      {/*system("cls");*/ 
       cout << "\n\nstandard"; 
       Sleep(1000); 
      }break; 

      case 2: 
      { 
       system("cls"); 

       Mainmenu a("a", "b", "return"); 
       a.Firstmenu(); 
      }break; 


      } 

      break; 
     } 





    } 
    Sleep(150); 
    system("cls"); 
} 

}; 

Mainmenu.hヘッダである/これは、これはmain.cppに

    ある/


    #include <iostream> 
    #include <string> 
    #include "windows.h" 
    #include "Mainmenu.h" 
    
    using namespace std; 
    
    
    int main() 
    { 
    system("mode con:cols=50 lines=30"); 
    Mainmenu test("a", "b", "c"); 
    test.Firstmenu(); 
    return 0; 
    } 
    

    Submenu.hヘッダであります

  1. コンソールウィンドウの最初の画面で、私は3つのメニュー(ex 1,2,3)を作成しました。

  2. サブメニューに入る番号1。 /(番号2は設定されていません)/ 3番のコンソールがシャットダウンします

  3. 1を押してサブメニューに入ります。

4.たとえば、サブメニュー項目は1S、2S、3Sです。

  1. この領域にはエラーがあります - > 3Sを押して最初の画面に戻ります。

    私はこれは相互参照エラーと思われます。 どうすればこの問題を解決できますか?

+0

どのようなエラーが表示されますか? – interjay

+0

ファイルが多すぎます。 Level = 1024そして#Includedファイルにはそれ自身のファイル自体が含まれています。 – brown

+0

この例のサイズを小さくする必要があると思います(おそらく5倍程度)。たとえば、(コンストラクタで渡すのではなく)固定コンテンツですべてのメニューを作成し、テキストの色付けを気にしないでください。また、問題を説明してコードを表示して*始める*。 –

答えて

0

include-guardを追加するのはどうですか? "Submenu.h" ---ケース2では


:{システム( "CLS")。メインメニューa( "a"、 "b"、 "return"); a.Firstmenu(); }ブレーク; C2605 'Mainmenu':未定義の識別子です。

"Submenu.h" の "Mainmenu.h"。(すべてのヘッダファイル用のガードを含めることを忘れないでください)

+0

これは#pragmaを一度追加することを意味しますか? – brown

+0

どちらか、または伝統的な(そして標準)。 '#ifndef FOO_INCLUDED \ n#FOO_INCLUDEDを定義\ n <ヘッダの内容> #endif \ n' –

+0

ありがとうございました。私はあなたのアドバイスをしましたが、別のエラーがあります。 \t C2605 'Mainmenu':未定義の識別子。 – brown

0

が、これはMainmenu.hヘッダ

#include <iostream> 
#include <string> 
#include "windows.h" 
#include "Mainmenu.h" // ERROR C1014 
です含めます

なぜ "Mainmenu.h"を内部に含めていますか?それは最高でです。無意味であり、この場合は積極的に有害です。

+0

#include "Mainmenu.h"この行が消去され、新しいエラーが発生しました。 – brown

+0

"Submenu.h"に---ケース2: { システム( "cls"); メインメニューa( "a"、 "b"、 "return"); a.Firstmenu(); } break; – brown

+0

C2605 'メインメニュー':未定義の識別子。 – brown

関連する問題