C++ c++;obect在switch语句中超出范围

C++ c++;obect在switch语句中超出范围,c++,C++,对象derm超出switch语句的范围。 我试图使它成为一个静态成员函数。 有什么办法可以让这一切顺利吗 这是我的密码: #include <iostream> #include <string> #include <fstream> #include <iomanip> #include <ctime> using namespace std; class Invinq { int menu_pick; strin

对象derm超出switch语句的范围。 我试图使它成为一个静态成员函数。 有什么办法可以让这一切顺利吗

这是我的密码:

#include <iostream>
#include <string>
#include <fstream>
#include <iomanip>
#include <ctime>

using namespace std;

class Invinq {
    int menu_pick;
    string db_read_out;

public:
    Invinq();
    void menu_maker();
    int add_record();
    int change_record();
    int delete_record();
    int display_record();
    int exit_program();
};

Invinq::Invinq()
{
  cout <<"Welcome to Inventory Inquisator.\n********************************\n" << endl;

  ifstream db_invinq;                       
  db_invinq.open("Invinq_db.txt");

  if(!db_invinq)                            
  {
    cout<<"\nNot able to create a file. MAJOR OS ERROR!! \n";
  } 

  for(int i = 0; i < db_invinq.eof(); i++)
  {
    db_invinq >> db_read_out;
    cout << db_read_out;
  } 
}

//Menu maker
void Invinq::menu_maker()
{
  cout << "1. Add Record\n2. Change Record\n3. Delete Record\n4. Display Record\n5. Exit\n\nPick One: ";
  cin >> menu_pick;

      switch(menu_pick)
      {
        case 1: derm.add_record(); break;
        case 2: derm.change_record(); break;
        case 3: derm.delete_record(); break;
        case 4: derm.display_record(); break;
        default: cout << "Pick a number between 1-5, try again\n";
      }
      derm.menu_maker();  
}

int main() {      
  Invinq derm;
  derm.menu_maker();

  return 0;
}
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
类Invinq{
int菜单选择;
读取的字符串db_;
公众:
Invinq();
无效菜单_生成器();
int add_record();
int change_record();
int delete_record();
int display_record();
int exit_程序();
};
Invinq::Invinq()
{

您似乎完全没有抓住要点。当您已经在
Invinq
类中时,您不需要
derm
——只需调用
菜单生成器()

话虽如此:您使用递归没有什么好的理由。这可能会产生一些意想不到的副作用。我建议您重构
menu\u maker()
-如果事实是现在没有办法摆脱递归,那么这真的很糟糕


main
应该拥有循环,每次都创建一个
Invinq
,否则每次都会覆盖同一个对象,这可能就是您现在想要的。

在类方法的定义中,您应该使用关键字
this
来引用自己

替换所有方法调用,如下所示:

案例1:derm.add_record();break;
案例1:this->add_record();break;


注意:
返回指向对象的指针,这就是为什么我们在通过
引用对象的方法中使用
->
而不是

的原因。建议阅读: