关于在C ++中创建指针数组

时间:2015-08-11 08:51:18

标签: c++ class

我有一个BossClass,将来我将有5个BossClass条目。我需要将它们组织成一个数组(传递给其他类),首选方法是什么?

以下是一些澄清我的问题的代码。

pip install yourapplication

此代码中的问题是,我无法在[1]处实例化MyClass,因为未定义默认构造函数。 我无法更改BossClass(但我可以更改MyClass)作为处理数据数组的变通方法。我该怎么办?

编辑:纠正了一些真正的逻辑错误。编译器现在使用消息

调用错误
  

错误:在[2]中将'BossClass **'赋值给'BossClass * [0]'的类型不兼容

我很好奇为什么数组不能指定给指针,作为另一个问题。

3 个答案:

答案 0 :(得分:1)

使用标准容器std::vector<BossClass>代替数组。

例如

#include <vector>

//...

class BossClass 
{
    public:
        BossClass(int);
};

class MyClass 
{
    public:
        MyClass( const std::vector<BossClass> & );
};
MyClass * someFunction()
{
    std::vector<BossClass> bossClasses;
    bossClasses.reserve( 5 );

    for (int i = 0; i < 5; i++)
    {
        // After some interactive input......
        bossClasses.emplace_back( i );
    }

    return new MyClass( bossClassese );
}

此外,您还可以在MyClass类中添加一个构造函数

        MyClass( std::vector<BossClass> && );

并写入函数

    return new MyClass( std::move( bossClassese ) );

答案 1 :(得分:1)

也许是这样的:

class MyClass 
{
public:
    MyClass(std::vector<BossClass>);
};

MyClass someFunction()
{
    std::vector<BossClass>   bossClasses;                //[1]
    for (int i=0; i<5; i++)
    {
        // After some interactive input......
        bossClasses.push_back(BossClass(i));
    }
   return MyClass(bossClasses);
}

答案 2 :(得分:0)

好的,这是一个“工作”修改后的代码段:

class BossClass 
{
    public:
        BossClass() = default;
        BossClass(int) { }
};
class MyClass 
{
    public:
        MyClass(BossClass*[5]) { }
};
MyClass* someFunction()
{
    BossClass* bossClasses[5];
    for (int i=0; i<5; i++)
    {
        bossClasses[i] = new BossClass(i);
    }
    return new MyClass(bossClasses);
}

但是,请记住C ++ 不是 Java(也不是C#)。它没有垃圾收集器,因此上面的代码不会清除使用new分配器创建的所有资源。更好的想法是使用智能指针而不是原始指针。有关详细信息和快速“如何”,您可以查看this amazing answer