2016-05-19 4 views
0

EDIT: Спасибо всем, что нашли время ответить. Я пробовал все предложения один за другим, и он все еще не работал. Я действительно хотел передать это, не обращаясь к профессору за помощью и не показав, что я не могу понять, как это сделать, но на данный момент, я думаю, мне придется это сделать. Я ценю, что вы нашли время, чтобы помочь! Спасибо.Невозможно правильно вызвать функцию в C++

Я беру курс C++ и имею задание, с которым у меня возникают проблемы. Я продолжаю получать ошибку: «ожидаемое первичное выражение перед« int »всеми тремя объявлениями массива. И «не был объявлен в этой области» всеми тремя передаваемыми адресами. Это на компиляторе, который я обычно использую. Я попробовал другой компилятор, и я получил ошибку «prog.cpp: 14: 38: error: can not convert» std :: array 'to' int 'для аргумента' 1 'to' void addArrays (int *, int *, int *) ' addArrays (& array1, & array2, & array3); " Я не совсем уверен, что происходит, поскольку я новичок и надеялся, что кто-то скажет мне, что означают эти ошибки и что я могу сделать, чтобы исправить их. Заранее спасибо. Вот код, у меня есть:

#include <iostream> 
#include <array> 
using namespace std; 
void addArrays(int*, int*, int*); 

int main() 
{ 
    array< int, 20 >array1 = 
     {7,45,90,1,33,254,3,8,9,4,2,6,77,5,9,2,22,4,12,6}; 
    array< int, 20 >array2 = 
     {88,4,6,75,1,12,33,99,66,88,7,4,44,4,3,13,5,4,9,3}; 
    array< int, 20 >array3; 

    addArrays(&array1,&array2,&array3); 

    cout << "Array1 + Array2 = Array3" << endl; 
    int j; 
    for(j=0; j<20; ++j) 
     cout << array1[j] << "+" << array2[j] << "=" << array3[j] << endl; 

    return 0; 
} 

void addArrays(int *array1, int *array2, int *array3) 
{ 
    int i; 
    for(i=0; i<20; ++i) 
     array3[i] = array1[i]+array2[i]; 
} 

ответ

0

Изменить объявление функции как

void addArrays(const std::array<int. 20> &, 
       const std::array<int, 20> &, 
       std::array<int, 20> &); 

и назвать его как

addArrays(array1, array2, array3); 

Другой подход заключается в определении функции как

void addArrays(const int *, const int *, int *); 

, но назовите его

addArrays(array1.data(), array2.data(), array3.data()); 
0

Следующая подпись

addArrays(int*, int*, int*); 

не принимает зЬй: массив - это компилируется, если вы измените его на

void addArrays(array< int, 20 > *array1, array< int, 20 > *array2, array< int, 20 > *array3) 
{ 
    int i; 
    for(i=0; i<20; ++i) 
     (*array3)[i] = (*array1)[i]+(*array2)[i]; 
} 

, если вы измените прототип

void addArrays(array< int, 20 > &array1, array< int, 20 > &array2, ......) 
1

Если вы хотите, чтобы функция r emain void addArrays(int *array1, int *array2, int *array3) Вы можете использовать метод datastd::array.

#include <iostream> 
#include <array> 
using namespace std; 
void addArrays(int*, int*, int*); 

int main() 
{ 
    array< int, 20 >array1 = 
     {7,45,90,1,33,254,3,8,9,4,2,6,77,5,9,2,22,4,12,6}; 
    array< int, 20 >array2 = 
     {88,4,6,75,1,12,33,99,66,88,7,4,44,4,3,13,5,4,9,3}; 
    array< int, 20 >array3; 

    addArrays(array1.data(),array2.data(),array3.data()); 

    cout << "Array1 + Array2 = Array3" << endl; 
    int j; 
    for(j=0; j<20; ++j) 
     cout << array1[j] << "+" << array2[j] << "=" << array3[j] << endl; 

    return 0; 
} 

void addArrays(int *array1, int *array2, int *array3) 
{ 
    int i; 
    for(i=0; i<20; ++i) 
     array3[i] = array1[i]+array2[i]; 
} 

Или сделать функцию принять std::array S в качестве аргументов, как это:

#include <iostream> 
#include <array> 
using namespace std; 
void addArrays(const array<int,20> &array1, 
        const array<int,20> &array2, 
        array<int,20> &array3); 
int main() 
{ 
    array< int, 20 >array1 = 
     {7,45,90,1,33,254,3,8,9,4,2,6,77,5,9,2,22,4,12,6}; 
    array< int, 20 >array2 = 
     {88,4,6,75,1,12,33,99,66,88,7,4,44,4,3,13,5,4,9,3}; 
    array< int, 20 >array3; 

    addArrays(array1,array2,array3); 

    cout << "Array1 + Array2 = Array3" << endl; 
    int j; 
    for(j=0; j<20; ++j) 
     cout << array1[j] << "+" << array2[j] << "=" << array3[j] << endl; 

    return 0; 
} 

void addArrays(const array<int,20> &array1, 
        const array<int,20> &array2, 
        array<int,20> &array3) 
{ 
    int i; 
    for(i=0; i<20; ++i) 
     array3[i] = array1[i]+array2[i]; 
} 
0

Ваша функция ожидает int* и вы передаете array<int,20>*.

Попробуйте это.

#include <iostream> 

#include <array> 
using namespace std; 
void addArrays(array< int, 20 >&, array< int, 20 >&, array< int, 20 >&); 

int main() 
{ 
    array< int, 20 >array1 = 
     {7,45,90,1,33,254,3,8,9,4,2,6,77,5,9,2,22,4,12,6}; 
    array< int, 20 >array2 = 
     {88,4,6,75,1,12,33,99,66,88,7,4,44,4,3,13,5,4,9,3}; 
    array< int, 20 >array3; 

    addArrays(array1,array2,array3); 

    cout << "Array1 + Array2 = Array3" << endl; 
    int j; 
    for(j=0; j<20; ++j) 
     cout << array1[j] << "+" << array2[j] << "=" << array3[j] << endl; 

    return 0; 
} 

void addArrays(array< int, 20 >& array1, array< int, 20 >& array2, array< int, 20 >& array3) 
{ 
    int i; 
    for(i=0; i<20; ++i) 
     array3[i] = array1[i]+array2[i]; 
} 
Смежные вопросы