【问题标题】:identifier not found error C++找不到标识符错误 C++
【发布时间】:2012-07-12 10:16:23
【问题描述】:

我的 C++ 代码出现错误。我通常是一名 Java 开发人员,但我正在学习关于 C++ 的课程,以便在我的编程能力方面更加广泛。无论如何,当我尝试构建此解决方案时,我得到了错误

1>c:\users\westlakes\documents\visual studio 2010\projects\blackjack\blackjack\playblackjack.cpp(81): error C3861: 'initializeGame': identifier not found
1>c:\users\westlakes\documents\visual studio 2010\projects\blackjack\blackjack\playblackjack.cpp(82): error C3861: 'deal': identifier not found
1>c:\users\westlakes\documents\visual studio 2010\projects\blackjack\blackjack\playblackjack.cpp(83): error C3861: 'playGame': identifier not found

谁能帮帮我?

// Programmer:  Matt Westlake

// Course:  COMP220

// Assignment:  Two-Dimensional Arrays

// Description:  The program will use a 2D array and a random-number
// generation to play Blackjack and keep track of a playing-card deck.

// Input:  User data entry and a playing-card deck represented as a two-
// dimensional array

// Output:  A screen display showing the current card hands of each player
// and the dealer, their score, win and lose status, and a final representation
// of the card deck after the game is over

#include <iostream>
#include <iomanip>
#include <windows.h>

using namespace std;

char cPlay = 'Y';       //Character variable for play game input
char tempDealerHand;
char cCardDeck[4][13];  //Character array representing the card deck
char output[5][8];
char card[1][1];
int iCard;              //Card array index
char cardName;
//0 = 2 card                                                              
//1 = 3 card
//2 = 4 card
//3 = 5 card
//4 = 6 card
//5 = 7 card                                                           
//6 = 8 card                                                        
//7 = 9 card                                     
//8 = 10 card                                                       
//9 = jack card
//10 = queen card
//11 = king card
//12 = ace card
int iNumberOfDraws = 0; //Number of rounds of card draws
int iSuit;//Suit array index
char Suit [4]; 

 //0 = diamonds
//1 = hearts
//2 = clubs
//3 = spades

// ASCII character display reference for display card suit symbols
//3 = heart symbol
//4 = diamond symbol
//5 = club symbol
//6 = spade symbol

int iNumberOfPlayers = 0;//Number of players in current game
int iPlayerCount[5];      //Integer array to holder each player's count
                                   //iPlayer[0] is always the dealer
int iHighestCount = 0;  //Highest count for a single game
int k, m;//integer loop counters


void initializeGame();
void deal();
void playGame();
char generateCard();
void generateDisplay();


void initializeGame()
{
if (iNumberOfPlayers == 0)
{
    cout << "No players in game, exiting program";
    Sleep(3000);
    exit(0);
}

cout << iNumberOfPlayers + "Joining the game with the dealer" << endl;
output[0][0] = 'Deal';
char name;
for (int i = 1; i <= iNumberOfPlayers; i++)
{
    output[i][0] = 'P ' + i;
}
for (int i = 0; i < 4; i++)
{
    for (int j = 0; j < 13; j++)
    {
        cCardDeck[i][j] = ' ';
    }
}

srand(GetTickCount());  //Seed the random-number generator
}

void deal()
{
for (k = 0; k <= iNumberOfPlayers; k++)
{
    for (m = 1; m <= 2; m++)
    {
        output[k][m] =  generateCard();
    }
}
tempDealerHand = output[0][0];
// output[0][0] = ? // to set dealer first hand to unknown
generateDisplay();
}

void playGame()
{
char HorS;
for (k = 1; k <= iNumberOfPlayers; k++)
{
    for (m = 3; m <= 5; m++)
    {
        cout << "Player " << k << " Would you like to Hit or Stay? Type H for Hit or anything else for Stay: ";
        cin >> HorS;
        if (HorS == 'H' || HorS == 'h')
        {
            output[k][m] = generateCard();
            generateDisplay();
        }
        else
        {
            break;
        }
    }
}
int dealerDraw = rand() % 3; // dealer will draw 0 to 3 cards;
for (int i = 0; i < dealerDraw; i++)
{
    output[0][i+3] = generateCard();
    generateDisplay();
}
}

char generateCard()
{
iSuit = rand() % 4;
iCard = rand() % 13;
if (iCard <= 8)
{
    cardName = iCard + 2;
}
else if (iCard == 9)
{
    cardName = 'J';
}
else if (iCard == 10)
{
    cardName = 'Q';
}
else if (iCard == 11)
{
    cardName = 'K';
}
else if (iCard == 12)
{
    cardName = 'A';
}
card[0][0] = Suit[iSuit],cardName;
return card[0][0];
}

void generateDisplay()
{ 
for (int i = 0; i < iNumberOfPlayers; i++)
{

    for (int j = 0; j < 8; j++)
    {
    cout << output[i][j];
    }
    cout << endl;
}
}

void main (void)
{


cout << "Do you want to play blackjack?";
cin >> cPlay;
Suit [0] = '0x03';
Suit [1] = '0x04';
Suit [2] = '0x05';
Suit [3] = '0x06';

cout << "Enter number of players: ";
cin >> iNumberOfPlayers;

while (true)
{
    initializeGame();
    deal();
    playGame();
}
}

edit 已更改,因此 main 位于底部,但仍然出现错误。

【问题讨论】:

  • 与 Java 不同,在 C++ 中,您不能在声明函数之前使用它们。我建议您不要假设您对 Java 的任何了解都适用于 C++,因为这样做只会导致痛苦。
  • 我把它改成了 main() 在底部,但它仍然给我错误
  • 因为你还是不明白这个问题:)。在 C 和 C++ 中,您需要在使用标识符之前声明它们。见stackoverflow.com/questions/1410563/…
  • C++ 工具链从上到下解析文件。如果它找到一个它无法识别的令牌,它就会死掉,并显示一条错误消息。为避免这种情况,您可以转发声明函数、变量、类等,以便它识别它们的名称。请注意,您没有定义它们,只是声明它们。
  • @filmor ok main 位于列表底部。就在 void initializeGame() 之前,我添加了 void initializeGame();无效交易();无效的游戏(); int 经销商绘图();字符生成卡();无效生成显示();它仍然给我同样的错误。我知道 C++ 必须先“声明”这些函数,然后才能实际使用它们(猜测在构建时与运行时构造它们?)。然而,这仍然给了我错误。我已经更新了我的代码以反映更改

标签: c++ initialization


【解决方案1】:

您可以在主函数之前进行前向声明:

void initializeGame();
void deal();
void playGame();

void main (void)
{
  ...
}

void initializeGame()
{
  ...
}

void deal()
{
  ...
}

void playGame()
{
  ...
}

或将主函数定义放在文件底部。

【讨论】:

  • 将主函数移动到文件末尾将不起作用,因为函数正在相互调用。
【解决方案2】:

您更新后的代码似乎对我很好。这是屏幕截图。

我在您的代码中找不到问题所在。看来您正在使用 Visual Studio。尝试清理您的解决方案(Build->Clean Solution),然后尝试重新构建您的代码。

【讨论】:

  • 我仍然收到错误 C3861: 'initializeGame': identifier not found 和很多其他错误,但这是第一个
  • 以下是我执行的步骤并且您的代码有效。它们如下: 步骤 1. 打开 Visual Studio。第2步。单击“新建项目...”。步骤 3. 选择 V​​isual C++ -> Win32 Console Application,然后填写项目名称和位置。步骤 4. 删除打开的文件中存在的所有内容,然后复制粘贴您在上面给出的代码。步骤 5. 按 Ctrl+S 保存文件。步骤 6. 按 F5 构建解决方案并运行程序。而且效果很好。我可以说概念和您的代码似乎没有问题。
  • 我认为我的 VS 安装有问题。我卸载了 VS 并重新安装了它,它工作正常(尽管该程序并没有完全按照我的意愿行事,但这是另一个问题)。现在似乎可以正常工作了,谢谢
【解决方案3】:

一般来说,您需要按照调用它们的顺序放置标识符(即函数定义):如果您调用某些东西,那么需要首先定义该东西。在这种情况下,基本上颠倒你的程序会对你有所帮助。

【讨论】:

  • 在调用它之前不需要 /define/ 。你只需要声明它,这就是这里失败的地方。
【解决方案4】:

在 main() 之前复制所有函数,或者通常总是在 .h 文件中声明函数并在 .cpp 文件中定义它。

【讨论】:

  • 这不是头文件的用途(或者,准确地说,它们是如何规范使用的)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-31
  • 2013-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多