[英]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.