Waarom krijg ik “ongeldige waarde die niet genegeerd wordt zoals het hoort”?

Ik heb de volgende functie:

void getdata(int arr[], int n)
{
    for (int i = 0; i < n; i++) 
    {
        int a = srand(time(NULL));
        arr[i] = a;
    }
}

En ik noem het in main:

getdata(arr, 1024);

Ik krijg “ongeldige waarde niet genegeerd zoals het hoort” maar ik begrijp niet wat er mis is. Waarom krijg ik deze foutmelding?


Antwoord 1, autoriteit 100%

  int a = srand(time(NULL));

Het prototype voor srand is void srand(unsigned int) (mits je <stdlib.h> hebt toegevoegd).
Dit betekent dat het niets teruggeeft … maar je gebruikt de waarde die het teruggeeft (???) om, door initialisatie, toe te wijzen aan a.


Bewerken: dit is wat je moet doen:

#include <stdlib.h> /* srand(), rand() */
#include <time.h>   /* time() */
#define ARRAY_SIZE 1024
void getdata(int arr[], int n)
{
    for (int i = 0; i < n; i++)
    {
        arr[i] = rand();
    }
}
int main(void)
{
    int arr[ARRAY_SIZE];
    srand(time(0));
    getdata(arr, ARRAY_SIZE);
    /* ... */
}

Antwoord 2, autoriteit 77%

De originele poster citeert een GCC-compilerfoutbericht, maar zelfs door deze thread te lezen, is het niet duidelijk of het foutbericht correct is geadresseerd – behalve door @pmg’s antwoord. (+1, btw)


fout: ongeldige waarde niet genegeerd zoals het hoort

Dit is een GCC-foutmelding die betekent dat de retourwaarde van een functie ‘void’ is, maar dat u deze probeert toe te wijzen aan een niet-void variabele.

Voorbeeld:

void myFunction()
{
   //...stuff...
}
int main()
{
   int myInt = myFunction(); //Compile error!
    return 0;
}

Het is niet toegestaan ​​om void toe te wijzen aan gehele getallen of enig ander type.

In de situatie van de OP:

int a = srand(time(NULL));

…is niet toegestaan. srand(), volgens de documentatie, retourneert void.

Deze vraag is een duplicaat van:

Ik reageer, ondanks dat het duplicaten zijn, omdat dit het beste resultaat op Google is voor deze foutmelding. Omdat deze thread het beste resultaat is, is het belangrijk dat deze thread een beknopt, duidelijk en gemakkelijk vindbaar resultaat geeft.


Antwoord 3, autoriteit 37%

srand retourneert niets, dus je kunt a niet initialiseren met zijn retourwaarde omdat, nou ja, omdat het geen waarde retourneert. Wilde je ook rand bellen?


Antwoord 4, autoriteit 17%

    int a = srand(time(NULL))
        arr[i] = a;

Zou moeten zijn

        arr[i] = rand();

En zet srand(time(NULL)) ergens helemaal aan het begin van je programma.


Antwoord 5, autoriteit 13%

“ongeldige waarde niet genegeerd zoals het hoort”
deze fout treedt op wanneer functie zoals srand (time (NULL)) iets niet retourneert en u het behandelt alsof het iets retourneert. Zoals in het geval van de pop()-functie in de wachtrij, als u het popped-element in een variabele opslaat, krijgt u dezelfde fout omdat het niets teruggeeft.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Other episodes