Почему выдает ошибку '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 шт):

Автор решения: Mikhailo

Хоть поинтеров и нет, но вить вы возвращаете

int binaryNum[32];
return binaryNum;

а при передаче туда-сюда массив преобразуется в указатель на первый элемент. Вот компилятор и пытается указатель int* превратить в то, что объявлено как возвращаемый тип - int, и не может этого сделать.

int b[con];
b= decToBinary(7);

Так нельзя в С++, не будет работать: присваивать массиву нельзя.

Если вы измените

int decToBinary(int n)

на

int* decToBinary(int n)

это тоже приведет к проблеме - нельзя возвращать указатель на локальную переменную, каковой является ваш массив binaryNum.

→ Ссылка
Автор решения: AlexGlebe

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;
 }
→ Ссылка