2015-11-27 3 views
-1

Я хочу сделать что-то вроде следующего примера: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

Спасибо за помощь.

+0

Как компилятор говорит, что вы должны дать границы массива для второго измерения. То, что все ваши строки * бывают * одинаковой длины, недостаточно. После того, как это исправлено, петли для работы должны работать. –

+0

Это пример. На самом деле у меня будут разные размеры для каждого значения ... – Mendes

ответ

1

Окончательное решение. Намного проще с помощью std::string в .. Не беспокойтесь о текстовых размерах:

#include <iostream> 

#include <memory> 
#include <vector> 

using namespace std; 

int main() 
{ 

    std::vector<std::vector<std::string>> 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 << " - "; 

     std::cout << std::endl; 
    } 


    return 0; 
} 
2

A) Вы должны объявить размер всех многомерных размеров массива, кроме первого, как ошибочные состояния: «Декларация в качестве многомерного массива„данные“должны иметь оценки для всех размеров, кроме первого»

char *data [][4] = { 

B) Если проблема A исправлена, эта ошибка должна исчезнуть, поскольку данные правильно определены.

Смежные вопросы