2014-10-07 3 views
0

Я разделил это на чистый костяной код. По сути, мне нужно передать 2d-массив в функцию, но размер массива считывается из текстового файла при выполнении. Все, что я прочитал на эту тему, говорит, что это способ сделать это, но компилятор говорит иначе. Вот код:Почему это не компилируется с mingw в Code :: Blocks?

#include <iostream> 

using namespace std; 

template <size_t r, size_t c> 
void func(int (&a)[r][c]) 
{ 
    return; 
} 

int main() 
{ 
    int rows = 5; 
    int cols = 6; 
    int Array[rows][cols]; 

    func(Array); 

    return 0; 
} 

Я предпочел бы избегать векторов, так как я очень незнакомый с ними. Это вывод компилятора:

-------------- Build: Debug in test (compiler: GNU GCC Compiler)--------------- 

mingw32-g++.exe -Wall -fexceptions -g -c C:\Users\ME\Desktop\test\test\main.cpp -o obj\Debug\main.o 
C:\Users\ME\Desktop\test\test\main.cpp: In function 'int main()': 
C:\Users\ME\Desktop\test\test\main.cpp:20:15: error: no matching function for call to 'func(int [(((unsigned int)(((int)rows) + -0x000000001)) + 1)][(((unsigned int)(((int)cols) + -0x000000001)) + 1)])' 
C:\Users\ME\Desktop\test\test\main.cpp:20:15: note: candidate is: 
C:\Users\ME\Desktop\test\test\main.cpp:6:25: note: template<unsigned int r, unsigned int c> void func(int (&)[r][c]) 
Process terminated with status 1 (0 minute(s), 0 second(s)) 
1 error(s), 0 warning(s) (0 minute(s), 0 second(s)) 

ответ

2

В этом коде

int rows = 5; 
int cols = 6; 
int Array[rows][cols]; 

Array не обычный C++ многомерный массив, но C99 переменной массив длины или VLA.

Это не стандарт C++.

Вместо делать

int const rows = 5; 
int const cols = 6; 
int Array[rows][cols]; 

Это работает, потому что выражения инициализатора известны во время компиляции.


Чтобы избежать подобных проблем, добавьте параметр -pedantic-errors на ваш вызов г ++.

+0

Я просто использовал «ряды» и «cols» в качестве подставки. Количество строк и столбцов будет считаться из текстового файла во время выполнения. Будет ли это работать? – bobsicle0

+0

@ bobsicle0 nope. числа, считанные из текстового файла, во время компиляции неизвестны. используйте 'std :: vector' для вашего хранения. –

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