2015-03-16 2 views
-3

Допустим, у меня есть эти две функции определения:C++ вызов функции со ссылкой на массив константных чисел

int* first(int const (& array)[], int const size); 
void second(int const array[], int const size); 

и при реализации второго я хочу сделать вызов первым, как это:

void second(int const array[], int const size) 
{ 
    int* something = first(*array, size); 
} 

Thats, когда компилятор говорит мне: «Нет соответствующей функции для вызова« сначала ». Каков правильный способ вызова сначала со второго в этом случае?

+7

Первый не должен компилироваться. Ты это пробовал? – juanchopanza

+0

Whooops ... извините. Однако моя IDE не обнаружила никакой ошибки. Должен ли я использовать постоянный указатель в этом случае? – Kevin

+0

Нет, массив должен иметь размер: 'int const (& array) [42]' – juanchopanza

ответ

0

Если вы действительно должны использовать массивы, я предложил бы использовать std::array:

#include <array> 

template<size_t N> 
int first(std::array<int, N> const& array) ; 

template<size_t N> 
void second(std::array<int, N> const& array) 
{ 
    int something = first(array); 
} 

int main() 
{ 
    std::array<int, 3> a = {1,2,3}; 

    second(a); 
} 

Если у вас есть массив с динамическим размером, освободить себя от бремени вручную управлять массивом и использовать std::vector вместо этого.

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