我到处都是,我在这里找不到一个明确的答案。或许我找到了答案,但我完全不理解。
我有3个对象:
Foo Object1;
Foo Object2;
Foo Object3;
我有一个功能,用户从与对象相关的字符串列表中选择。当用户输入时,说" B",我想现在对Object2执行操作。
这基本上就是我所拥有的。
string getOption()
{
string option;
cout << "Option Menu" << endl;
cout << "A - Option 1" << endl; // Object1
cout << "B - Option 2" << Lendl; // Object2
cout << "C - Option 3" << endl; // Object3
cin >> option;
return option;
现在我有输入,我想在对象上执行许多选项。类似的东西:
void modifyFooString(foo userSelectedObject)
{
// Local variables
string userInput;
userInput = readInput(); // Function that reads valid input
userSelectedObject.setMethod(userInput);
}
但功能众多。它处于while循环中,因此我需要修改对象,然后重新提示用户是否要对其他对象进行更改。
当我看到这个问题时,我认为可以使用指针。例如:
void getOption(Foo* &choice)
{
string option;
cout << "Option Menu" << endl;
cout << "A - Option 1" << endl; // Object1
cout << "B - Option 2" << Lendl; // Object2
cout << "C - Option 3" << endl; // Object3
cin >> option;
if (option == "A")
choice = &Object1;
else if (option == "A")
choice = &Object2;
if (option == "A")
choice = &Object3;
}
理想情况下,我现在可以在执行getOption()
函数的函数中使用指针来修改所选对象。但是,当我尝试像这样实现它时,它只是不起作用。
如何返回可用于修改所选对象的指针?
由于
答案 0 :(得分:1)
可能会取得更大的成功
if (option == "A")
choice = &Object1;
else if (option == "B")
choice = &Object2;
else if (option == "C")
choice = &Object3;
你还应该澄清它不起作用的内容&#39;实际上意味着。
由于你想返回某些东西,使用C ++ return语句更自然。
Foo* getOption()
{
...
if (option == "A")
return &Object1;
else if (option == "B")
return &Object2;
else if (option == "C")
return &Object3;
答案 1 :(得分:0)
与约翰的答案相同,但if-else-ladder被我认为更清楚的东西取代:)
Foo* getOption() {
...
return option == "A" ? &Object1 :
option == "B" ? &Object2 :
option == "C" ? &Object3 :
nullptr ;
}
答案 2 :(得分:0)
问题的最小例子,
#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;
class Foo
{
public:
int id;
int data;
Foo(int tid,int tdata)
{
id = tid;
data = tdata;
}
};
Foo *Object1 = new Foo(1,0);
Foo *Object2 = new Foo(2,0);
Foo *Object3 = new Foo(3,0);
Foo* getOption()
{
char option;
cout << "Option Menu" << endl;
cout << "A - Option 1" << endl; // Object1
cout << "B - Option 2" << endl; // Object2
cout << "C - Option 3" << endl; // Object3
cin >> option;
switch (option)
{
case 'A':
return Object1;
break;
case 'B':
return Object2;
break;
case 'C':
return Object3;
break;
default:
cout << option ;
break;
}
return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
cout << (getOption())->id;
_getch();
return 0;
}
在此示例中,您将回答
1 for option == A
2 for option == B
3 for option == C
我所做的主要改变是,
1. changed
if (option == "A") // comparing A
choice = &Object1;
else if (option == "A") // Comparing B
choice = &Object2;
if (option == "A") //comparing C
choice = &Object3;
to
switch (option)
{
case 'A':
return Object1;
break;
case 'B':
return Object2;
break;
case 'C':
return Object3;
break;
default:
cout << option ;
break;
}
2. changed
option == "A" to option == 'A' format // when I have used if instead of switch
尝试这个,让我知道它是否对你有帮助