【发布时间】:2014-12-25 12:52:45
【问题描述】:
我试图制作一个程序,您可以在其中提供离开 cmets、查看 cmets 和创建帐户的菜单。我将菜单设置为 switch 语句。在大多数情况下,我需要一个“用户对象”,但它是在 case1 中创建的,它的范围仅在 case1 中。我使用了“用户指针”,所以我可以在其他情况下使用它。我有 switch 语句,所以它一直运行到用户退出。当我在 case1 中添加指针并运行程序时它崩溃了。 “我的问题是有另一种方法可以让所有其他情况下都可以访问“在 case1 中创建的用户对象”??
User *uPointr = NULL;
int: selec;
cout << " enter a selection: " ;
do{
switch(selec)
{
case 1: // creates a user
{
string name;
cout << " Enter you name ": ;
cin >> name;
User newUser(); // making an new user
addUsertoList(newUser);
*uPointer = newUser();
break;
}
case 2:
{
string message;
count << " Enter message:;
cin >> message;
uPointer.addMessage(message);
break;
}
case 3:
{
UPointer->disPlayMessage();
break;
}
case 4:
{
exit(0);
}
}
} While(1);
【问题讨论】:
-
这段代码有很多问题。首先,您使用未初始化的
selec,这是未定义的行为。selec的声明是错误的(这不是 Pascal...)。User newUser();不创建用户对象,它声明了一个返回User的函数。*uPointer = newUser()将尝试调用该不存在的函数并将其返回值存储在uPointer指向的对象中,这是一个空指针,再次调用 UB。 -
"User newUser(); // 创建一个新用户" 不。
-
@TheParamagneticCroissant 这应该是答案
-
您向用户询问 name,但您没有对该名称进行任何操作。这不好,向用户询问不会被处理的信息。
-
另外,如果您要使用指针,请正确使用它们。这 '。'运算符与实例一起使用,'->' 运算符与指针一起使用。大多数情况下,您不需要使用
new运算符分配内存。
标签: c++ pointers object switch-statement