C++, eroare de conversie invalidă din `int*’ în `int’ (Programare, C++)

user1876088 a intrebat.

Am următorul cod C++:

#include <iostream>
using namespace std;
int main(){
}
int findH(int positionH[]){
    return positionH;         //error happens here.
}

Compilatorul aruncă o eroare:

invalid conversion from `int*' to `int'

Ce înseamnă această eroare?

Comentarii

  • Verificați tipul de returnare al instrucțiunii findH din nou și comparați cu ceea ce returnează de fapt și cu ceea ce încercați să atribuiți valorii de retur. –  > Por Un programator oarecare.
  • findH returnează și int și aveți int bla[2] –  > Por Pavenhimself.
  • „Aparent, în funcția findH, se creează o matrice bidimensională positionH…?” — Nu, nu asta spune mesajul de eroare și nu văd cum ai ajuns la această concluzie. – user743382
  • Uită-te bine la tipul lui positionH. Ce înseamnă []? –  > Por dmaij.
  • @user1876088: Eroarea înseamnă exact ceea ce spune că înseamnă. Chiar nu este nimic de adăugat aici. positionH este un int *. Funcția este declarată ca returnând int. Așadar, funcția dvs. return positionH încearcă să convertească int * în int, ceea ce este ilegal. Adevărata întrebare aici este ce ar trebui să însemne codul dumneavoastră. Ce ați încercat să obțineți prin acea funcție? –  > Por AnT.
4 răspunsuri
Pavenhimself

positionH[] este o matrice, iar tipul de retur al acesteia este int.

Compilatorul nu vă va permite să faceți acest lucru. Fie faceți din parametru un int:

int findH(int positionH){
    return positionH;        
}

Fie faceți ca tipul de returnare să fie un pointer la un int:

int* findH(int positionH[]){
    return positionH;        
}

Sau convertiți matricea într-un întreg înainte de returnare:

int findH(int positionH[]){
    return positionH[0];
}

CashCow

Această linie nu este validă în C++ (și nici în C, în care pare să fie scris codul dumneavoastră):

int bla[2] = findH(field, positionH);

bla este un array de 2 elemente și nu poate fi inițializat în acest fel. findH returnează int.

Ramanand Yadav

Această eroare apare în timp ce încercați să faceți:

int *p =10;

asta înseamnă că atribuiți int valoare la pointertoint *p .

Dar pointerul stochează adresa, ceea ce înseamnă că *p ia 10 ca adresă.

Așa că trebuie doar să faceți:

int i=10;
int *p=&i;

sau

p=&i;

nu va da nicio eroare.

Desert Ice

Eroarea a fost cauzată de faptul că ați returnat un pointer și compilatorul se așteaptă la un int.

Există o diferență foarte MARE între int * și int.

De asemenea, de ce returnezi positionH, array-urile sunt transmise prin referință, nu este nevoie să o returnezi.

Un cod mai bun ar fi

void option1(char** field, int[])   
   {
     int  findH(char **, int[]); 
     int positionH[2];
    findH(field, positionH);
      //positionH passed by reference, no need to return it
    }

void  findH(char **field, int positionH[])
{
    for(int n = 0;n < 14 ; n++)
    {
        for(int m = 0; m < 14; m++)
        {
                   if(field[m][n] == 'H')
                   {

                   positionH[0] = n;
                   positionH[1] = m;

        }
         }
    }

}

Comentarii

  • Mulțumesc foarte mult! Acest lucru mi-a deschis ochii și mi-a arătat că nu este nevoie să returnez valoarea. –  > Por utilizator1876088.
  • @user1876088, Aflați mai multe despre pass by reference și pass by values, v-ar ajuta să mergeți mult mai departe și să vă ajutați să preveniți viitoarele erori. –  > Por Desert Ice.
  • @DesertIce, vă înșelați… positionH nu este transmis prin referință aici. –  > Por Brian Cain.

Tags: