C ++定义对象数组的元素

时间:2016-07-21 18:50:05

标签: c++ arrays object arduino

我是一名Java程序员,正在研究我的第一个C ++项目,我正在努力理解如何处理数组。我正在尝试编写一个结构上等同于以下代码的程序。但是,在我的实际项目中,class Astruct B在头文件中声明。我理解这一点的方式是语句b.arr[2]将数组b.arr实例化为长度为2.然而,当我按原样运行以下代码时,我得到错误exited with non-zero status。当我注释掉用于将b.arr [1]设置为等于a2的行时,它运行正常。为什么这样,我怎么能这样做?另外,有没有办法可以将b.arr数组重新定义为不同的长度?我环顾四周,但我找不到什么似乎可以解决这个具体问题。

class A {};

struct B {   
    A *arr[];
};

int main() {
    B b;
    b.arr[2]; // instantiates array to be of length 2?
    A a1;
    A a2;
    b.arr[0] = &a1;
    b.arr[1] = &a2; // RUNS FINE WITHOUT THIS LINE
}

谢谢!

顺便说一句,我是为arduino库编写的,所以我不能使用std命名空间。

2 个答案:

答案 0 :(得分:1)

b.arr[2]; // instantiates array to be of length 2?

这是不正确的。

它引用了数组的第三个元素,并且对元素的值没有任何作用。

该程序调用未定义的行为,因为当它未被初始化为指向有效内存时访问b.arr的元素。

答案 1 :(得分:0)

b.arr[2];

这已经是未定义的行为。访问尚未分配的内容。这意味着所有赌注都已关闭,您不能依赖任何代码以任何特定方式行事。

如果你想存储A指针,请尝试使用std::vector<A*>std::array<A*>作为静态长度容器。