1

我是 C++ 编程的新手,以前对 AS3 编程有一定的了解。我的问题是我无法弄清楚如何将一个新对象从一个类插入到一个数组中。

基本上我想做的是:

ClassName classArray[];
classArray[n]=new ClassName("Tekst");

这是我的代码(使用 Visual Studios 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++ 中类的一些基本要素?

4

4 回答 4

2

std::vector是一种实现动态大小数组的数据结构,可以根据需要增加大小。您可以使用 anstd::vector<User>而不是您自己的数组:

#include <vector>

...

  std::vector<User> v;

  // perhaps in a loop
  string inn;
  cin >> inn;
  v.push_back(User(inn));
于 2013-06-09T12:31:04.800 回答
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,则必须插入指向User (std::vector<User * > userVectoruserVector.push_back(new User(inn))) 的指针,delete然后手动删除指针。(见下方评论)

于 2013-06-09T12:37:30.993 回答
1

一旦创建了数组,就无法更改其长度。

于 2013-06-09T12:33:16.150 回答
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) );
}
于 2013-06-09T12:43:55.390 回答