在运行时有没有一种简单的方法来创建/命名C++对象?

在运行时有没有一种简单的方法来创建/命名C++对象?,c++,C++,一般来说,我对编程非常陌生 所以我正在构建一个程序,它只需要获取关于用户的信息并将其存储在一个对象中。所以每次有新用户出现时,我都需要一个新的对象和一个新的名称,这只是我正在构建的一个程序。我知道我已经在堆上分配了太多的空间,但是如果我不知道我要收集多少对象,我怎么知道我需要多少空间呢?我想我需要做的是在堆上分配内存,在创建obj的函数中分配内存,这样每次调用函数时我都会得到所需的内存?我读了一些有人建议使用向量的文章,所以我简单地学习了关于向量的介绍,但是当我尝试这个的时候 string ob

一般来说,我对编程非常陌生

所以我正在构建一个程序,它只需要获取关于用户的信息并将其存储在一个对象中。所以每次有新用户出现时,我都需要一个新的对象和一个新的名称,这只是我正在构建的一个程序。我知道我已经在堆上分配了太多的空间,但是如果我不知道我要收集多少对象,我怎么知道我需要多少空间呢?我想我需要做的是在堆上分配内存,在创建obj的函数中分配内存,这样每次调用函数时我都会得到所需的内存?我读了一些有人建议使用向量的文章,所以我简单地学习了关于向量的介绍,但是当我尝试这个的时候

string objname;
cin >> objname;
vector<string> v;
v.push_back(objname);
usersclass v.back();
v.back().somefunc();

请给我举个例子,这不是为了学校或我自己教的任何东西

您正在尝试做一些奇怪的事情,因为vector v只包含字符串,您只是在编写错误的代码

我假设您想要创建usersclass对象,所以您需要一个以std::string作为参数的构造函数,您的代码应该是这样的

class usersclass {
public:
    usersclass(const std::string& arg) : m_string(arg) {};
    void somefunc() { /* 'dunno, maybe std::cout << m_string' ? */ }
private:
    std::string m_string;
}

// somewhere in main()
string objname;
cin >> objname;
usersclass userobject{ objname };
userobject.somefunc();

但总的来说,我建议你阅读任何一本来自美国的初学者书籍。这将对您非常有帮助。

您不能在运行时命名对象。事实上,在运行时,所有这些好的变量名都消失了,当您构建程序时,编译器和链接器会将它们替换为地址和偏移量

您可以做的是std::映射名称;并将其与名称[objname].somefunc一起使用

map为您管理所有存储,因此您不必分配或取消分配任何内容


我还没有研究过std::map,所以我可以对此发表评论,但是的StarlRight是对的,不正确的代码我真的不理解obj/类,如果另一个初学者需要一个超级简单的示例程序,这是有效的:

int main()
{
std::vector<newclass> vnewclass;
int x(1);
int z(0);
int c;
while(x == 1)
{
    std::cout << z << std::endl;
    newclass objs;
    objs.printhi();
    objs.enterdata();
    objs.printdata();
    vnewclass.push_back(objs);
    std::cout << "add obj ?" << std::endl;
    std::cin >> x;
    z++;
}
std::cout << "what obj would you like to view ?" << std::endl;
std::cin >> c;
vnewclass[c].printdata();
return 0;
}

嘿……OP想从用户那里输入一个字符串输入,并用它创建一个对象作为对象的字符串,它比编程便宜:使用C++的原理和实践?53美元像什么@Jhonnyballugas知识-是你能做的最好的投资
int main()
{
std::vector<newclass> vnewclass;
int x(1);
int z(0);
int c;
while(x == 1)
{
    std::cout << z << std::endl;
    newclass objs;
    objs.printhi();
    objs.enterdata();
    objs.printdata();
    vnewclass.push_back(objs);
    std::cout << "add obj ?" << std::endl;
    std::cin >> x;
    z++;
}
std::cout << "what obj would you like to view ?" << std::endl;
std::cin >> c;
vnewclass[c].printdata();
return 0;
}