C++ get/set 在 switch case 中没有得到值

C++ get/set not getting value in switch case

我有 2 classes ML 每个都有自己的 .header.cpp 文件。

在classL中有get/set个方法

    class L // this is in L.h file
{
      private:
    int A;
    float B;

    public:
        A();

        A(int,float);

        void setA(int A);
        int getA();

        void setB(int B); 
        int getNoOfEarthLikePlanets();

};

//L.cpp//

L::L() // default constructor
{
    A = 0;
    B = 0;  
}   

L::L(int aA,float bB) non-default constructor
{   
    A = aA;
    B = bB; 
}

void L::setA(int aA) // set A
{
    A = aA;
}

int L::getA() // get A
{
    return(A);
}

void L::setB(float bB) //set B
{

    B = bB;
}

float L::geB() // get B
{   
    return(B);
}

我的 class M:

#include "L.h"
void M::mainMenu()
{
    int choice = 0;
    cout<<" 1) enter your A and B:"endl;
    cout<<" 2) Display your An B :"endl;
    cin>>choice;

    yourChoice(choice);


}
void M::yourChoice(int choice)
{   
    const int size = 50;
     int cinA;
     int cinB;
    static int count = 0;
    L newL[size];

while(choice != 999)          
    {
        switch(choice)
        {            
            case 1:
            {                          
                 while(count<SIZE)
                 {                
                 cout<<"What is A : ";
                 cin>>cinA;
                 newL[count].setA(cinA);
                 cout<<"What is B: ";
                 cin>>cinB;
                 newL[count].setA(cinA);
                 ++count;  
                  //******i tried to cout my newL[count].getA(); it displays a blank too*********
                 mainMenu();      
                 cin>>choice;
                 break;    
                 };
        //Even if i bring newL
            } // end of case 1
        break;
       case 2:
        {
           for(int x = 0;x<size;x++)
                   {                          
           cout<<newL[x].getA()<<endl; //Prints a blank 
                   }       
        }//end of case 2
         }//end of switch
   }//end of while

我在案例 1 中使用 get/set 获取用户输入,并在案例 2 中将其打印出来。但是,当我在案例 1 中输入详细信息后,我转到案例 2,它什么也不显示,甚至没有 0,只是一片空白。我还尝试将 static 放在我的类型变量前面,因为我认为这可能是调用之间要做的事情。

而且我还尝试 cout getA() 在案例 1 中输入值后,它也显示空白。我错过了什么?如果您觉得我写的其他代码可能会导致这种情况发生,请索取更多详细代码。这只是一部分。

在我的 int main() 我只是 运行 mainMenu();

forgivenprog33442 我认为没有打印出任何内容,因为您的代码实际上从未进入案例 2,因为您在 ++count 之后立即在 yourChoice 方法中调用 mainMenu(),意外地进行了递归。只需在 yourChoice 方法中从 choice 变量中删除 mainMenu() 并在 class.

中将 choice 声明为 private 变量

例如,您可以在选择范围内时循环执行此操作

while(choice > 0 && choice < 3) 
{
    switch(choice)
    {
          case 1:
             while(count < SIZE)
            { 
             //loop until all number are set
             //then ask for choice
             //make sure you check if space in array 
             //or use a vector so it can resize automatically
             }
          case 2:
             //print your values
    }

}
while(choice != 999)          
    {
        switch(choice)
        {            
            case 1:
            {                          
                 while(count<SIZE)
                 {                
                 cout<<"What is A : ";
                 cin>>cinA;
                 newL[count].setA(cinA);
                 cout<<"What is B: ";
                 cin>>cinB;
                 newL[count].setA(cinA);
                 ++count;  
                  //******i tried to cout my newL[count].getA(); it displays a blank too*********
                 YOUR TROUBLE MAKER>>>>>mainMenu();      
                 cin>>choice;
                 break;    
                 };
        //Even if i bring newL
            } // end of case 1
        break;
       case 2:
        {
           for(int x = 0;x<size;x++)
                   {                          
           cout<<newL[x].getA()<<endl; //Prints a blank 
                   }       
        }//end of case 2
         }//end of switch
   }//end of while

那条麻烦制造者行创建了一个新的 mainMenu 实例,因此,另一组 newL 数组与您在原始 mainMenu 中实例化的原始 newL 无关。由于 mainMenu 本身调用另一个 yourChoice.

推荐

添加布尔模式只是为了确保您希望在禁用输入的情况下显示主菜单。这样你可以调用mainMenu(true);如果你想要一个输入和mainMenu(false);如果你只想要一个显示

void M::mainMenu(boolean mode)
{
    cout<<" 1) enter your A and B:"endl;
    cout<<" 2) Display your An B :"endl;
    
    if(mode)
    {
        int choice = 0;
        cin >> choice;
        yourChoice(choice); 
    }   
}