我对编程很新!
所以我正在构建一个程序,它只是获取用户的信息并将其存储在一个对象中。因此,每次有新用户出现时,我都需要一个带有新名称的新对象(这只是我正在构建的一个程序)。我知道我在堆上也分配了空间,但是如果我不知道我想要多少个对象,我怎么知道需要多少空间呢?我想我需要做的是在创建obj的函数中在堆上分配内存所以每次调用函数时我都得到所需的内存?我读过有人建议使用矢量的东西,所以我简要介绍了一些关于那些的介绍,但是当我尝试这个时
string objname;
cin >> objname;
vector<string> v;
v.push_back(objname);
usersclass v.back();
v.back().somefunc();
发生错误,我真的认为它不会有任何不同:
string objname;
cin >> objname;
usersclass objname;
objname.somefunc();
请举个例子,这不是为了学校或我自学的任何东西。
答案 0 :(得分:4)
您无法在运行时命名对象。实际上,在运行时,所有这些漂亮的变量名都消失了,在构建程序时由编译器和链接器替换为地址和偏移量。
您可以执行std::map<std::string, usersclass> names;
并将其与names[objname].somefunc()
std::map
为您管理所有存储空间,因此您无需分配或取消分配任何内容。
答案 1 :(得分:0)
你正在尝试做一些奇怪的事情,因为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();
但总的来说,我建议您阅读here中的任何初学者书籍。这对你很有帮助。
答案 2 :(得分:0)
我还没看过std :: map所以我可以对此发表评论,但是Starl1ght是对的,不正确的代码我真的没有理解obj / classes这样做以防其他初学者需要超级简单的示例程序:
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;
}