对象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;
}
答案 0 :(得分:1)
你好像完全忽略了这一点。当您已经进入derm
课程时,您不需要Invinq
- 只需致电menu_maker()
。
话虽如此:你没有充分理由使用递归。这会产生一些意想不到的副作用。我建议你重构menu_maker()
- 如果事实上现在没有办法摆脱递归,那真是太糟糕了!
你main
应该有循环并且每次都创建一个Invinq
,否则你每次只是覆盖同一个对象,这可能就是你想要的。
答案 1 :(得分:0)
在您的类方法定义中,您应该使用关键字this
来引用自己。
替换所有方法调用,如下所示:
case 1: derm.add_record(); break;
&gt; case 1: this->add_record(); break;
注意: this
会返回指向您对象的指针,这就是我们使用->
而不是.