Почему выдает ошибку 'invalid conversion from *int to int 'вить нет никаких поинтеров
#include<iostream>
using namespace std;
int con=32;
int decToBinary(int n)
{
// array to store binary number
int binaryNum[32];
// counter for binary array
int i = 0;
while (n > 0) {
// storing remainder in binary array
binaryNum[i] = n % 2;
n = n / 2;
i++;
}
// printing binary array in reverse order
return binaryNum;
}
int main(){
int b[con];
b= decToBinary(7);
}
Ответы (2 шт):
Хоть поинтеров и нет, но вить вы возвращаете
int binaryNum[32];
return binaryNum;
а при передаче туда-сюда массив преобразуется в указатель на первый элемент. Вот компилятор и пытается указатель int* превратить в то, что объявлено как возвращаемый тип - int, и не может этого сделать.
int b[con];
b= decToBinary(7);
Так нельзя в С++, не будет работать: присваивать массиву нельзя.
Если вы измените
int decToBinary(int n)
на
int* decToBinary(int n)
это тоже приведет к проблеме - нельзя возвращать указатель на локальную переменную, каковой является ваш массив binaryNum.
return binaryNum; - пытаетесь возвратить указатель на массив. А возвращаемый тип функции - число типа int.
Тип массива не передаётся копированием. Он преобразовывается в указатель на первый элемент, если это вам подходит. Такую проблему возврата решает упаковка массива в структуру. Структура уже может передаваться копированием.
int constexpr con=32;
struct sArr {
int a[con] ;
int n;
};
#include<iostream>
using namespace std;
sArr decToBinary(int n)
{
// array to store binary number
sArr binaryNum ;
// counter for binary array
int i = 0;
while (n > 0) {
// storing remainder in binary array
binaryNum.a[i] = n % 2;
n = n / 2;
i++;
}
binaryNum.n=i;
// printing binary array in reverse order
return binaryNum;
}
int main(){
sArr b;
b= decToBinary(7);
for(int i=0;i<b.n;++i)
cout <<"["<<i<<"]="<<b.a[i]<<" " ;
cout<<endl;
}