我是c ++编程的新手,以前有关AS3编程的知识。 我的问题是我无法弄清楚如何将类中的新对象插入到数组中。
基本上我要做的是:
ClassName classArray[];
classArray[n]=new ClassName("Tekst");
这是我的代码(使用visual studio 2012 C ++编写):
#include <iostream>
#include <string>
using namespace std;
//a class holding user data
class User
{
public:
string name;
User(string nameInn)
{
//when the user is created it should get information about its name.
name=nameInn;
}
};
//array with all users
User userArr[];
int userArrLength=0; //the length of that array (dont know how to find the length of arays holding classes)
int main()
{
//the user writes down the name of all users.
cout << "Write user name. \n Write \"fin\" til finish\n";
bool hasFinished=false;
//asks you for a new user until you write fin
while(hasFinished==false)
{
string inn;
cin >> inn;
if(inn=="fin") hasFinished=true;
//here im trying to make a new user inn a new spot in the userArr.
else userArr[(userArrLength+=1)+1]=new User(inn);
}
return 0;
}
我的格式是否错误,如果是这样我如何格式化?或者我误解了C ++中的类必不可少的东西?
答案 0 :(得分:2)
std::vector是一个实现动态大小的数组的数据结构,可以根据需要增加大小。您可以使用std::vector<User>
代替自己的数组:
#include <vector>
...
std::vector<User> v;
// perhaps in a loop
string inn;
cin >> inn;
v.push_back(User(inn));
答案 1 :(得分:1)
创建数组后,无法更改数组的长度。
答案 2 :(得分:1)
在C ++中,数组的大小是静态的。此外,new会创建一个指针,这意味着您还要为数组使用错误的数据类型。
建议的解决方法是使用向量,而不是:
// At the top
#include <vector>
// Instead of that array
std::vector<User> userVector;
// Inside of the loop
userVector.push_back(User(inn));
std::vector
本质上是一个动态数组。
但仍有一些事情要考虑:为向量分配空间时,所有成员都使用默认构造函数初始化(即可以不带参数调用的成员)。
如果您的(见下面的评论)User
类没有默认构造函数如果您的cl,则必须将指针插入用户(std::vector<User * > userVector
和userVector.push_back(new User(inn))
)相反,然后手动删除delete
之后的指针。
答案 3 :(得分:0)
如果您不知道数组的大小,那么您不应该使用静态数组。您应该使用动态数组。像这样:
#include <vector>
std::vector<User> userArr;
此处userArr
将是具有动态大小的向量。然后你可以改变你的while循环来代替:
std::vector<User> arr;
for (std::string in; std::cin >> in && in != "fin";)
{
arr.push_back( User(in) );
}