多个对象指向同一个数组

时间:2015-06-12 13:28:37

标签: c++

我在使用C ++中的指针时相当新,但我会尝试解释我想要做的事情。

我有一个类对象Rx(接收器),在我的程序中,我将同时使用多个接收器。每个接收器都有一个数据向量(观察),为简单起见,我只使用双向量。我还有一个bool数组,决定使用哪些观察,我希望每个接收器(作为成员变量)都有一个指向这个数组的指针。例如,bool数组中的第一个元素会说“true或false使用你有接收器的第一个观察”。

另外,在我的代码中,我还想指出一个对象数组,我会遵循相同的程序吗?

int main()
{
    // The elements in this array are set in the code before
    bool use_observations[100];
    // I have chosen 3 for an example but in my actual code I have a vector
    // of receivers since the quantity varies
    Rx receiver_1, receiver_2, receiver_3;
    // I would like to set the pointer in each receiver to point
    // to the array use_observations
    receiver_1.SetPointer(use_observations);
    receiver_2.SetPointer(use_observations);
    receiver_3.SetPointer(use_observations);
} // end of main()

我的接收器类声明和定义:

class Rx{
public:
    Rx(); // Constructor
    Rx(const Rx& in_Rx); // Copy constructor
    ~Rx(); // Destructor
    void SetPointer(bool* in_Array); // Function to set pointer to use_observation
private:
    std::vector<double> data;
    bool* pointer_to_array[10];
}; // end of class Rx

void Rx::SetPointer(bool* in_Array)`{*pointer_to_array`= in_Array);

这是我遇到问题的地方,要么它没有正确分配(获取大量空值或未分配),或者我在pointer_to_array上收到错误,说表达式必须是可修改的值

我没有打扰显示构造函数,复制构造函数和析构函数。我通常知道在析构函数中你应该删除指针但是Rx不拥有数组中的数据所以我不想删除它。 谢谢你的帮助

编辑**我已经展示了一些我正在使用的代码以及我得到的结果,我修改了SetPointer()以显示一些结果

int main
{
bool use_observations [6] = {true, true, true, true, true, true};
Rx receiver_1;
receiver_1.SetPointer(use_observations);
}

void Rx::SetPointer(bool* in_Array)
{
*pointer_to_array = in_Array;
for(int i = 0; i < 6; i++)
{
    if(*pointer_to_array[i] == true)
        std::cout << "Good" << std::endl;
} // end of for loop
} // end of SetPointer()

当我调试并跳过(* pointer_to_array = in_Array)时,我得到了结果 {true,其余元素为0xCCCCCCCC}然后在for循环的第二次迭代中崩溃说“访问冲突读取位置0xCCCCCCCC

第二次编辑** 感谢大家的帮助。 @PaulMcKenzie在Rx的实现中(在评论中)指出我应该有bool * pointer_to_array而不是bool * pointer_to_array [6]并解决了这个问题。我也应该指向数组缓冲区的开头,而不是指向数组的指针。

1 个答案:

答案 0 :(得分:1)

问题是你想要一个指向数组缓冲区起点的指针,而不是指向数组的指针。

class Rx{
public:
    void SetPointer(bool* in_Array); 
    bool* pointer_to_array;
};

void Rx::SetPointer(bool* in_Array) {pointer_to_array = in_Array);

请注意删除*