无法从<brace-enclosed initializer =“”list =“”>转换为int(*)数组

时间:2015-06-20 07:50:14

标签: c++

我对C ++很陌生,并希望得到一些帮助我不断得到这个错误。

#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 ++的初学者,我还在学习。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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);
}