繁体   English   中英

C++,初始化器值过多,使用 DMA 指针进行布尔数组初始化

[英]C++, Too many initializer values, Bool Array Initialization using DMA Pointers

我不明白为什么我会收到这个错误。 这不是数组初始化的正确方式吗?

#include <iostream>
using namespace std;
int main()
{
    bool **arr = new bool *[5]; //rows
    for (int i = 0; i < 5; i++)
    {
        arr[i] = new bool[5]; //col
    }
    arr[5][5] = {
        {false,true,false,true,true},
        {false,true,false,true,true},
        {false,true,false,true,true},
        {false,true,false,true,true},
        {false,true,false,true,true},

                    };
    
}

如果您的数组大小是静态已知的,则在编译时,您可以使用std::array<T, N>

#include <array>

std::array<std::array<bool, 5>, 5> arr = {{
    {false,true,false,true,true},
    {false,true,false,true,true},
    {false,true,false,true,true},
    {false,true,false,true,true},
    {false,true,false,true,true}
}};

在这份声明中

arr[5][5] = {
    {false,true,false,true,true},
    {false,true,false,true,true},
    {false,true,false,true,true},
    {false,true,false,true,true},
    {false,true,false,true,true},

                };

您正在尝试分配一个不存在的 object (数组的两个维度的有效索引范围是[0, 5) )类型为bool的初始化程序列表包含多个初始化程序。

所以这个说法必须去掉。

相反,您可以在 for 循环中编写

for (int i = 0; i < 5; i++)
{
    arr[i] = new bool[5] {false,true,false,true,true}; 
}

这是一个演示程序。

#include <iostream>

int main() 
{
    const size_t N = 5;

    bool **arr = new bool *[N]; //rows
    for ( size_t i = 0; i < N; i++ )
    {
        arr[i] = new bool[N] {false,true,false,true,true};
    }

    std::cout << std::boolalpha;

    for (  size_t i = 0; i < N; i++ )
    {
        for ( size_t j = 0; j < N; j++ )
        {
            std::cout << arr[i][j] << ' ';
        }
        std::cout << '\n';
    }

    for ( size_t i = 0; i < N; i++ )
    {
        delete [] arr[i];
    }
    delete [] arr;
}

程序 output 是

false true false true true 
false true false true true 
false true false true true 
false true false true true 
false true false true true 

另一种方法是最初分配一个二维数组。

这是一个演示程序。

#include <iostream>

int main() 
{
    const size_t N = 5;

    bool ( *arr )[N] = new bool [N][N]
    {
        {false,true,false,true,true},
        {false,true,false,true,true},
        {false,true,false,true,true},
        {false,true,false,true,true},
        {false,true,false,true,true}
    };
    std::cout << std::boolalpha;

    for (  size_t i = 0; i < N; i++ )
    {
        for ( size_t j = 0; j < N; j++ )
        {
            std::cout << arr[i][j] << ' ';
        }
        std::cout << '\n';
    }

    delete [] arr;
}

程序output同上图

false true false true true 
false true false true true 
false true false true true 
false true false true true 
false true false true true 

请注意,您可以使用标准容器std::vector<std::vector<bool>> ,而不是手动分配 arrays 。

这是另一个演示程序。

#include <iostream>
#include <vector>

int main() 
{
    std::vector<std::vector<bool>> arr =
    {
        {false,true,false,true,true},
        {false,true,false,true,true},
        {false,true,false,true,true},
        {false,true,false,true,true},
        {false,true,false,true,true}
    };
    std::cout << std::boolalpha;

    for (  const auto &row : arr )
    {
        for ( const auto &item : row )
        {
            std::cout << item << ' ';
        }
        std::cout << '\n';
    }
}

output 再次是

false true false true true 
false true false true true 
false true false true true 
false true false true true 
false true false true true 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM