2015-06-20 1 views
2

Я очень новичок в C++ и хотел бы помочь с этой ошибкой, которую я продолжаю получать.Не удалось преобразовать из <список элементов списка> с привязкой к скобкам> в массив int (*)

#include <iostream> 
#include <string> 

using namespace std; 

void print (int test[2][2]= {{1,2},{3,4}}) 
{ 
    cout << test[0][0] << endl; 
    cout << test[1][0] << endl; 
} 

int main() 
{ 
    print(); 
    return 0; 
} 

Ошибка: не удалось преобразовать '{{1, 2}, {3, 4}}' от '' до 'Int (*) [2] |

Я новичок в C++ и до сих пор учился.

ответ

5

функции, объявленные как массивы настраиваются неявно указатели на их первые элементы.

Так объявление функции на самом деле выглядит

void print (int (*test)[2] = { { 1, 2 }, { 3, 4 } }); 

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

В самом деле эти функции декларации

void print(int test[10][2]); 
void print(int test[2][2]); 
void print(int test[][2]); 
void print(int (*test)[2]); 

эквивалентны и объявить ту же одну функцию.

Однако вы можете определить параметр как ссылку на массив. В этом случае вы получите ожидаемый результат. Например

#include <iostream> 

void print (const int (&test)[2][2] = { { 1, 2 }, { 3, 4 } }) 
{ 
    std::cout << test[0][0] << std::endl; 
    std::cout << test[1][0] << std::endl; 
} 


int main() 
{ 
    print(); 

    int a[2][2] = { { 5, 6 }, { 7, 8 } }; 

    print(a); 
}  

Выход программы

1 
3 
5 
7 
+0

Благодаря человеку, это помогло кучу! – woodenwaffle

+0

@woodenwaffle Добро пожаловать. :) –

0

Существует простой работы вокруг: параметры

void print (int test[2][2]) 
{ 
    cout << test[0][0] << endl; 
    cout << test[1][0] << endl; 
} 
void print() 
{ 
    int test[2][2] = {{1,2},{3,4}}; 
    print(test); 
} 
Смежные вопросы