【问题标题】:Can I create an object whose name is written by users?我可以创建一个名称由用户编写的对象吗?
【发布时间】:2020-09-12 04:56:58
【问题描述】:

我是 C++ 编程的新手,我需要创建一个对象并用写在键盘上的字符串命名它。但是我尝试使用指针和变量,但是当我声明一个对象(比如说一个 int)时,无法在用户编写的内容之后给出它的名称。我会尽力去描绘,原谅我这么简单。

int main() {
 string x;
 std::cin>>x;
 int x;
}

我想创建一个 int 对象,其名称是字符串 x 先前声明并由用户在键盘上填充。但是,这显然给了我一个错误,并且指针似乎不起作用。还有其他方法吗?提前谢谢大家。

【问题讨论】:

  • 对象“名称”的真正含义是“标识符”。标识符是一个编译时概念。考虑在运行时添加标识符是没有意义的。如果您想将ints 与strings 关联,也许您需要std::map<std::string, int>。如果您说明为什么要这样做,我们可以更轻松地提出解决方案
  • “我需要创建一个对象并用写在键盘上的字符串命名它” 你为什么认为你需要这样做?你认为它会帮助你解决什么实际问题?描述那个问题,而不是你尝试的解决方案。另见:the XY problem
  • 好吧,你总是可以用一个结构来包装它,有一个int and string 成员,存储在一个向量中,然后按名称搜索它。但这非常糟糕而且没用。
  • Pointers do not seem to work 连指针都没用,一定是个超级难的问题。
  • 很遗憾编译后的程序中不存在变量名,它们只存在于源代码中。因此这个问题是不可能的。现在,您真正尝试解决的任何更大的问题都是可行的,但这不是正确的方法。

标签: c++ object variables syntax naming-conventions


【解决方案1】:
class A{
    public:
    A(){}

    A(std::string _name): name{_name}{}

    void setName(std::string _name)
    {
        name = _name;
    }

    std::string name;
}

这就是你反对的样子。 你可以这样创建它

int main()
{
    string x;
    std::cin>>x;
    A a(x); //one option;
    A b;
    b.setName(x);//second option
}

【讨论】:

  • 这不是 OP 所要求的。他想从用户那里得到一个变量名,然后将它与一个 int 关联起来。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-04
相关资源
最近更新 更多