2017-05-30 18 views
-8

私は本当に皆さんがこの問題を手伝ってくれることを願っています。私はサイトの初心者でもC++の初心者でもあります(約1ヶ月間しか学習していません)。私のコンパイラはVS2012です。私はプログラムのための一連のメニューに取り組んでいます。これらのメニューでは、クラスごとに簡単なswitch文を使用します。各メニューは基本メニュークラスから派生しています。私はメニュークラス自体に問題がないように思われるので、それらはすべて自分自身の.hヘッダーファイルを持つ別々の.cppファイルに入っているので、今は含めません。私は彼らが私の問題の一部であると信じて以来、私はベースメニューの.cppと.hファイルを含めています。私はまた、私のメインの.cppファイルも含めています。エラーC2440: '初期化中': 'BaseMenu'から 'BaseMenu *'に変換できません

BaseMenu.h

#ifndef BaseMenu_M 
    #define BaseMenu_M 


    #include<string> 
    #include<iostream> 



    using std::cout; 


    class BaseMenu 
    { 
    public: 

     BaseMenu() { m_MenuText = "This is where the menu text choices will appear"; }// Constructor providing menu text to each derived menu 
     virtual ~BaseMenu() { }    // virtual destructor 
     virtual BaseMenu getNextMenu(int iChoice, bool& iIsQuitOptionSelected);   // used to set up the framework 
     virtual void printText()                 // member function to display the menu text 
     { 
      cout << m_MenuText << std::endl; 
     } 

    protected: 
     std::string m_MenuText;  // string will be shared by all derived classes 
    }; 

    #endif 

BaseMenu.cpp

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


    BaseMenu::BaseMenu(void) 
    { 
    } 


    BaseMenu::~BaseMenu(void) 
    { 
    } 

私が把握することはできません何らかの理由でメイン.cppファイル

#include "stdafx.h" 
    #include "BaseMenu.h" 
    #include "TicketSalesMenu.h" 
    #include "MainMenu.h" 
    #include "ListMenu.h" 
    #include "AdministrativeTasksMenu.h" 
    #include "basemenu.h" 


    #include <iostream> 
    #include <string> 

    using std::cin; 



    int tmain (int argc, _TCHAR* argv[]) 
    { 


     BaseMenu* aCurrentMenu = new MainMenu;   // Pointer to the current working menu 

     bool isQuitOptionSelected = false; 
     while (!isQuitOptionSelected)     // set to keep menus running until the quit option is selected 
     { 

      aCurrentMenu->printText();     // call and print the menu text for the currently active menu 

      int choice = 0;        // Initializing choice variable and setting it to 0 
      cin >> choice; 

      BaseMenu* aNewMenuPointer = aCurrentMenu->getNextMenu(choice, isQuitOptionSelected); // This will return a new object, of the type of the new menu we want. Also checks if quit was selected //**This is the line that the error is reported**// 

      if (aNewMenuPointer) 
      { 
       delete aCurrentMenu;     // clean up the old menu 
     aCurrentMenu = aNewMenuPointer;     // updating the 'current menu' with the new menu 
      } 
     } 

     return true;  
    } 

、私は

を受け付けております

エラーC2440: 'initializing': 'BaseMenu'から 'BaseMenu *'に変換できません。このエラーは

"BaseMenu* aNewMenuPointer = aCurrentMenu->getNextMenu(choice, isQuitOptionSelected);" 

私は、このサイトや他の人から複数の類似の質問を見てきましたあるライン35上のメインの.cppファイル、です。私が試したソリューションの1つは、すべての私のメニュークラスに複数のリンクエラーが発生しました。私はこのエラーを1つ残りのエラーに減らすために3日かかりましたが、私は迷っています。

+1

'BaseMenu :: getNextMenu'は' BaseMenu'の*インスタンス*を返すように宣言されていますが、 'aNewMenuPointer'は' BaseMenu'の*ポインタ*です。値と値へのポインタは、2つの非常に異なるものです。 –

答えて

0

コンパイラが問題を伝えています。 getNextMenuは実際のBaseMenuオブジェクトを返しますが、オブジェクトをBaseMenuオブジェクトへのポインタに割り当てようとしています。

関連する問題