我正在为Arduino写一堂课。到目前为止一直很顺利,但我现在有点卡住......
我在班级中声明了一个int数组
class myClass
{
public: MyClass(int size);
private:
int _intArray[];
};
当我初始化类MyClass myClass1(5)
时,我需要将数组看作{0,0,0,0,0}。
我的问题:我需要做什么才能让数组包含“大小”数量的零?
MyClass::MyClass(int size)
{
//what goes here to dynamically initialize the array
for(int i=0; i < size; i++) _intArray[i] = 0;
}
编辑:跟进下面的各种回复,Arduino不包含标准库,所以不幸的是std::vector
不是一个选项
答案 0 :(得分:2)
你应该使用std :: vector。
class myCLass {
public:
myClass(int size)
: intarray(size) {
for(int i = 0; i < size; i++) intarray[i] = 0;
}
private:
std::vector<int> intarray;
};
答案 1 :(得分:2)
我会尝试以下方法:
class myClass
{
public:
MyClass(int size);
~MyClass();
private:
int* _intArray;
};
MyClass::MyClass(int size) {
_intArray = new int[size];
for (int i=0; i<size; ++i) _intArray[i] =0; // or use memset ...
}
MyClass::~MyClass() {
delete[] _intArray;
}
或者,更好的是,使用STL vector
而不是......
答案 2 :(得分:2)
我的代码正如我写的那样:
class myClass
{
public: MyClass(int size);
private:
int _intArray[];
};
_intArray
的声明无效C ++:原始数组需要在编译时指定大小。
您可以改为使用std::vector
:
class myClass
{
public:
MyClass( int size )
: intArray_( size ) // Vector of given size with zero-valued elements.
{}
private:
std::vector<int> intArray_;
};
注1 :一些编译器可能允许您的原始代码作为语言扩展,以支持“struct hack”(这是C语言中不需要的C技术)。
注2 :我已更改了您的会员名称。通常,名称开头的下划线可能会有问题,因为它们可能与C ++实现中的名称冲突。
干杯&amp;第h。,
答案 3 :(得分:2)
你应该像其他人建议的那样使用矢量。解决方法可以如图所示(如果您不想使用memcpy或循环)。
如果你有一个非常庞大的数组,这将是有用的。请注意,它会添加一个间接级别来访问数组。
class myClass
{
public:
myClass(){
mt = T(); // value initialize.
}
private:
struct T{
int _intArray[10];
} mt;
};
int main(){
myClass m;
}