2013-04-30 6 views
8

Ich versuche einige Grafiken zu implementieren, aber ich habe Probleme beim Aufruf der Funktion int rollDice() auf der Unterseite gezeigt und bin nicht sicher, wie Sie das lösen? irgendwelche Ideen ... Ich bekomme einen Fehler Fehler C3861: 'RollDice': Bezeichner nicht gefunden.Fehler C3861: 'RollDice': Bezeichner nicht gefunden

int rollDice(); 

    void CMFCApplication11Dlg::OnBnClickedButton1() 
{ 

    enum Status { CONTINUE, WON, LOST }; 
    int myPoint; 
    Status gameStatus; 
    srand((unsigned)time(NULL)); 
    int sumOfDice = rollDice(); 

    switch (sumOfDice) 
    { 
     case 7: 
     case 11: 
     gameStatus = WON; 
     break; 

     case 2: 
     case 3: 
     case 12: 
     gameStatus = LOST; 
     break; 
     default: 
      gameStatus = CONTINUE; 
      myPoint = sumOfDice; 
     break; 
    } 
    while (gameStatus == CONTINUE) 
    { 
     rollCounter++; 
     sumOfDice = rollDice(); 

     if (sumOfDice == myPoint) 
     gameStatus = WON; 
     else 
     if (sumOfDice == 7) 
      gameStatus = LOST; 
    } 


    if (gameStatus == WON) 
    { 

    } 
    else 
    { 

    } 
} 

int rollDice() 
{ 
    int die1 = 1 + rand() % 6; 
    int die2 = 1 + rand() % 6; 
    int sum = die1 + die2; 
    return sum; 
} 

+3

Entnommen von den verwandten Links auf der rechten Seite, http://StackOverflow.com/Questions/12723107/error-c3861-initnode-identifier-not-found?rq=1 – chris

+1

Warum haben Sie Ihre Frage bearbeitet, um die Antwort zu enthalten ? Die Frage macht jetzt keinen Sinn. – caps

Antwort

25

Der Compiler durchläuft Ihre Dateien vom Anfang bis zum Ende, was bedeutet, dass die Platzierung der Definition Ihrer Funktion von Bedeutung ist. In diesem Fall können Sie entweder die Definition dieser Funktion bewegen, bevor es erstmals verwendet wird:

void rollDice() 
{ 
    ... 
} 

void otherFunction() 
{ 
    // rollDice has been previously defined: 
    rollDice(); 
} 

oder Sie forward-Deklaration verwenden können, den Compiler zu sagen, dass eine solche Funktion vorhanden ist:

// function rollDice with the following prototype exists: 
void rollDice(); 

void otherFunction() 
{ 
    // rollDice has been previously declared: 
    rollDice(); 
} 

// definition of rollDice: 
void rollDice() 
{ 
    ... 
} 

beachten Sie auch, dass Funktionsprototyp von Name angegeben wird, sondern auch Rückgabewert und Parameter:

void foo(); 
int foo(int); 
int foo(int, int); 

so werden die Funktionen unterschieden. int foo(); und void foo(); sind unterschiedliche Funktionen, da sie sich jedoch nur in ihrem Rückgabewert unterscheiden, können sie nicht im selben Umfang existieren (für weitere Informationen siehe Function Overloading).

+0

Mein Projekt hat nicht funktioniert, bis ich die 'void' Bestellung ändere. Vielen Dank!!! +1. –

2

Put Erklärung der vor OnBnClickedButton1rollDice

int rollDice(); 

vor OnBnClickedButton1 oder einfach bewegen, um die Definition der rollDice Funktion Funktion aktualisiert.

Der Grund dafür ist in der aktuellen Code, wenn Sie rollDice innerhalb OnBnClickedButton1 nennen, hat die Funktion nicht vom Compiler noch nicht gesehen worden ist, das ist, warum Sie, dass identifier not found Fehler gesehen.

Verwandte Themen