2013-04-30 31 views
8

Tôi đang thử triển khai một số đồ họa, nhưng tôi gặp sự cố khi gọi hàm int rollDice() hiển thị ở dưới cùng và không chắc chắn cách giải quyết vấn đề này? bất kỳ ý tưởng ... Tôi nhận được một lỗi lỗi C3861: 'rollDice': không tìm thấy mã định danh.lỗi C3861: 'rollDice': không tìm thấy số nhận dạng

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; 
} 

cập nhật

+3

Lấy từ các liên kết có liên quan ở bên phải, http://stackoverflow.com/questions/12723107/error-c3861-initnode-identifier-not-found?rq=1 – chris

+1

Tại sao bạn chỉnh sửa câu hỏi của mình để bao gồm câu trả lời ? Câu hỏi bây giờ không có ý nghĩa gì cả. – caps

Trả lời

25

Trình biên dịch đi qua các tệp của bạn từ đầu đến cuối, có nghĩa là vị trí của định nghĩa hàm của bạn quan trọng. Trong trường hợp này, bạn có thể di chuyển các định nghĩa của chức năng này trước khi nó được sử dụng lần đầu tiên:

void rollDice() 
{ 
    ... 
} 

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

hoặc bạn có thể sử dụng tờ khai chuyển tiếp nói với trình biên dịch rằng một chức năng như vậy tồn tại:

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

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

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

cũng lưu ý rằng chức năng nguyên mẫu được xác định bởi tên, mà còn trở lại giá trịthông số:

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

đây là cách chức năng đang được phân biệt được phân biệt. int foo();void foo(); là các hàm khác nhau, tuy nhiên vì chúng chỉ khác nhau về giá trị trả về của chúng nên chúng không thể tồn tại trong cùng một phạm vi (để biết thêm thông tin, xem Function Overloading).

+0

Dự án của tôi không hoạt động cho đến khi tôi thay đổi thứ tự 'void'. Cảm ơn!!! +1. –

2

khai Đặt của hàm rollDice

int rollDice(); 

trước OnBnClickedButton1 hoặc đơn giản là di chuyển nghĩa của rollDice chức năng trước khi OnBnClickedButton1.

Lý do nằm trong mã hiện tại của bạn khi bạn gọi rollDice bên trong OnBnClickedButton1, chức năng chưa được trình biên dịch nhìn thấy, đó là lý do tại sao bạn thấy lỗi identifier not found.

Các vấn đề liên quan