我有一个BossClass,将来我将有5个BossClass条目。我需要将它们组织成一个数组(传递给其他类),首选方法是什么?
以下是一些澄清我的问题的代码。
pip install yourapplication
此代码中的问题是,我无法在[1]处实例化MyClass,因为未定义默认构造函数。 我无法更改BossClass(但我可以更改MyClass)作为处理数据数组的变通方法。我该怎么办?
编辑:纠正了一些真正的逻辑错误。编译器现在使用消息
调用错误错误:在[2]中将'BossClass **'赋值给'BossClass * [0]'的类型不兼容
我很好奇为什么数组不能指定给指针,作为另一个问题。
答案 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。