带有布尔数组成员的 C++ 结构.如何在主代码中使用

c++ struct with bool array member. How use in main code

本文关键字:代码 布尔数 组成员 结构 C++      更新时间:2023-10-16
struct thread_data
{
  int seq, packetNum;
  bool ackTally[4];
};
main:
      bool boolArray[4];
      data[j].packetNum = 3;      
      data[j].seq = 1;      
      data[j].ackTally = boolArray;  

运行此代码会给我此错误

错误:将bool [1]分配给bool [0]的类型不兼容

   data[j].ackTally = boolArray;     

如何在代码中解决此问题? (这可能不相关,因为我可能希望稍后在主代码中更改其中一些值(

不能

分配 C 样式数组。 有两种简单的方法可以解决此问题:

首先,使用 std::copy 而不是赋值:

#include <algorithm>
#include <iterator>
struct thread_data
{
  int seq, packetNum;
  bool ackTally[4];
};
int main() {
    thread_data data;
    bool boolArray[4];
    // Initialize boolArray.
    std::copy( std::begin(boolArray), std::end(boolArray),
               std::begin(data.ackTally) );
}

或者其次,将 C 样式数组替换为 std::arraystd::array的几个好处之一是可以分配:

#include <array>
struct thread_data
{
  int seq, packetNum;
  std::array<bool, 4> ackTally;
};
int main() {
    thread_data data;
    std::array<bool, 4> boolArray;
    // Initialize boolArray.
    thread_data.ackTally = boolArray;
}

无法分配数组。必须在循环中复制每个元素。不过,您不必自己编写该循环,因为标准库中有一个算法:std::copy .

附言:从boolArray复制将具有未定义的行为,因为它的值是不确定的。