Я хочу сделать что-то вроде следующего примера:C++ Массив инициализации массива и Интерактивного
#include <iostream>
#include <memory>
using namespace std;
int main()
{
char *data [][] = {
{ "11", "12", "13", "14" },
{ "21", "22", "23", "24" },
{ "31", "32", "33", "34" },
{ "41", "42", "43", "44" },
};
for (auto &item : data)
{
for (auto &var : item)
std::cout << var << " - ";
}
return 0;
}
Это не компилируется:
$ g++ -std=c++11 -o main *.cpp
main.cpp: In function 'int main()':
main.cpp:10:17: error: declaration of 'data' as multidimensional array must have bounds for all dimensions except the first
char *data [][] = {
^
main.cpp:17:22: error: 'data' was not declared in this scope
for (auto &item : data)
^
main.cpp:19:25: error: unable to deduce 'auto&&' from 'item'
for (auto &var : item)
^
Итак:
A) Seens, что я не может объявить многомерный массив без установки его размера. Это верно ?
b) Я не могу использовать итератор, чтобы пройти базовый тип (например, char * []), только на векторах. Это верно ?
c) Как я могу исправить этот код, чтобы он работал. Я не хочу использовать std::vector
Спасибо за помощь.
Как компилятор говорит, что вы должны дать границы массива для второго измерения. То, что все ваши строки * бывают * одинаковой длины, недостаточно. После того, как это исправлено, петли для работы должны работать. –
Это пример. На самом деле у меня будут разные размеры для каждого значения ... – Mendes