首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我得到编译错误"<variable>没有在这个作用域中声明“?

为什么我得到编译错误"<variable>没有在这个作用域中声明“?
EN

Stack Overflow用户
提问于 2009-02-09 00:57:29
回答 4查看 646关注 0票数 0

不久前,我的第一个C++程序(这个)遇到了一些问题。基本上,我是在做C++入门课的作业,教授没有教我们语法。下面是我现在的代码:

代码语言:javascript
复制
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <string>


using namespace std;
class Race
{
  public:
     void main()
     {

        executeRace();

        int randomMove()
        {
                srand(time(NULL));
                int randomInt = rand() % 100 + 1;
                return randomInt;
        }

        void executeRace()
        {
                int rabbitPosition = 1;
                int turtlePosition = 1;

                cout << "BANG!!!" << endl << "AND THEY'RE OFF!!!";

                while (rabbitPosition <=70 && turtlePosition <=70)
                {
                        printPositions(rabbitPosition, turtlePosition);

                        turtlePosition = turtleMoveSquares(turtlePosition);
                        rabbitPosition = rabbitMoveSquares(rabbitPosition);
                }

                printWinner(rabbitPosition, turtlePosition);

                tie(rabbitPosition, turtlePosition);
        }

        int turtleMoveSquares(int tPosition)
        {

                int turtleMove = randomMove();

                if(turtleMove >=1 && turtleMove <= 40)
                        tPosition = tPosition + 4;

                if(turtleMove >= 41 && turtleMove <= 50 )
                        tPosition = tPosition - 2;

                if(turtleMove >=51 && turtleMove <=100)
                        tPosition = tPosition + 2;

                if(tPosition < 1)
                        tPosition = 1;

                return tPosition;
        }

        int rabbitMoveSquares(int rabbitPosition)
        {

                int rabbitMove = randomMove();

                if(rabbitMove >=1 && rabbitMove <= 25)
                        rabbitPosition = rabbitPosition;

                if(rabbitMove >=26 && rabbitMove <= 55)
                        rabbitPosition = rabbitPosition + 10;

                if(rabbitMove >=56 && rabbitMove <=60)
                        rabbitPosition = rabbitPosition - 15;

                if(rabbitMove >=61 && rabbitMove <= 90)
                        rabbitPosition = rabbitPosition + 5;

                if(rabbitMove >=90 && rabbitMove <=100)
                        rabbitPosition = rabbitPosition - 3;

                if(rabbitPosition < 1)
                        rabbitPosition = 1;

                return rabbitPosition;
        }

        void printPositions(int rabbitPositions, int turtlePositions)
        {
                int turtleCount;
                int rabbitCount;
                int endCount;

                if(rabbitPositions == turtlePositions && rabbitPositions != 1)
                {
                        turtleCount = 1;

                        while(turtleCount < turtlePositions)
                        {
                                cout << "-";
                                turtleCount = turtleCount+1;
                        }
                        cout << "OUCH!";
                }

                else
                {
                        turtleCount = 1;
                        rabbitCount = 1;
                        endCount=1;

                        if(turtlePositions < rabbitPositions)
                        {
                                while(turtleCount < turtlePositions)
                                {
                                        cout <<  "-";
                                                turtleCount = turtleCount+1;
                                }
                                cout << "T";

                                while(rabbitCount < (rabbitPositions - turtlePositions))
                                {
                                        cout <<  "-";
                                        rabbitCount = rabbitCount+1;
                                }
                                cout << "H";

                        }

                        if(rabbitPositions < turtlePositions)
                        {
                                while(rabbitCount < rabbitPositions)
                                {
                                        cout << "-";
                                                rabbitCount = rabbitCount+1;
                                }
                                cout << "H";

                                while(turtleCount < (turtlePositions - rabbitPositions))
                                {
                                        cout << "-";
                                        turtleCount = turtleCount+1;
                                }
                                cout << "T";

                                cout << "\n";
                        }
                }
        }

        void printWinner(int rabbitPosition, int turtlePosition)
        {
                if(turtlePosition >= 70 && rabbitPosition < 70)
                {
                        cout << "TORTOISE WINS!!! YAY!!!\n";
                }
                else if(rabbitPosition >=70 && turtlePosition < 70)
                {
                        cout << "Hare wins. Yuch.\n";
                }
                else if(rabbitPosition >=70 && turtlePosition >=70)
                {
                        cout << "It's a tie\n";
                }
        }

        void tie(int turtlePosition, int rabbitPosition)
        {
                if(rabbitPosition >=70 && turtlePosition >=70)
                        executeRace();
        }

    }
};



int main()
{
  Race race;
  race.main();
  return EXIT_SUCCESS;
}

下面是我在编译时的错误:

代码语言:javascript
复制
uxb3% g++ o- Race Race.cc
g++: o-: No such file or directory
g++: Race: No such file or directory
Race.cc: In member function 'void Race::main()':
Race.cc:14: error: 'executeRace' was not declared in this scope
Race.cc:17: error: a function-definition is not allowed here before '{' token
Race.cc:24: error: a function-definition is not allowed here before '{' token
Race.cc:44: error: a function-definition is not allowed here before '{' token
Race.cc:64: error: a function-definition is not allowed here before '{' token
Race.cc:90: error: a function-definition is not allowed here before '{' token
Race.cc:153: error: a function-definition is not allowed here before '{' token
Race.cc:169: error: a function-definition is not allowed here before '{' token

很抱歉一直打扰你们这个任务,但这是我的第一次,我现在非常非常沮丧和痴迷。

EN

回答 4

Stack Overflow用户

发布于 2009-02-09 01:00:58

您不能使用functions inside your functions*。

你可能想要这个:

代码语言:javascript
复制
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <string>


using namespace std;
class Race
{
  public:
    int randomMove()
    {
            srand(time(NULL));
            int randomInt = rand() % 100 + 1;
            return randomInt;
    }

    void executeRace()
    {
            int rabbitPosition = 1;
            int turtlePosition = 1;

            cout << "BANG!!!" << endl << "AND THEY'RE OFF!!!";

            while (rabbitPosition <=70 && turtlePosition <=70)
            {
                    printPositions(rabbitPosition, turtlePosition);

                    turtlePosition = turtleMoveSquares(turtlePosition);
                    rabbitPosition = rabbitMoveSquares(rabbitPosition);
            }

            printWinner(rabbitPosition, turtlePosition);

            tie(rabbitPosition, turtlePosition);
    }

    int turtleMoveSquares(int tPosition)
    {

            int turtleMove = randomMove();

            if(turtleMove >=1 && turtleMove <= 40)
                    tPosition = tPosition + 4;

            if(turtleMove >= 41 && turtleMove <= 50 )
                    tPosition = tPosition - 2;

            if(turtleMove >=51 && turtleMove <=100)
                    tPosition = tPosition + 2;

            if(tPosition < 1)
                    tPosition = 1;

            return tPosition;
    }

    int rabbitMoveSquares(int rabbitPosition)
    {

            int rabbitMove = randomMove();

            if(rabbitMove >=1 && rabbitMove <= 25)
                    rabbitPosition = rabbitPosition;

            if(rabbitMove >=26 && rabbitMove <= 55)
                    rabbitPosition = rabbitPosition + 10;

            if(rabbitMove >=56 && rabbitMove <=60)
                    rabbitPosition = rabbitPosition - 15;

            if(rabbitMove >=61 && rabbitMove <= 90)
                    rabbitPosition = rabbitPosition + 5;

            if(rabbitMove >=90 && rabbitMove <=100)
                    rabbitPosition = rabbitPosition - 3;

            if(rabbitPosition < 1)
                    rabbitPosition = 1;

            return rabbitPosition;
    }

    void printPositions(int rabbitPositions, int turtlePositions)
    {
            int turtleCount;
            int rabbitCount;
            int endCount;

            if(rabbitPositions == turtlePositions && rabbitPositions != 1)
            {
                    turtleCount = 1;

                    while(turtleCount < turtlePositions)
                    {
                            cout << "-";
                            turtleCount = turtleCount+1;
                    }
                    cout << "OUCH!";
            }

            else
            {
                    turtleCount = 1;
                    rabbitCount = 1;
                    endCount=1;

                    if(turtlePositions < rabbitPositions)
                    {
                            while(turtleCount < turtlePositions)
                            {
                                    cout <<  "-";
                                            turtleCount = turtleCount+1;
                            }
                            cout << "T";

                            while(rabbitCount < (rabbitPositions - turtlePositions))
                            {
                                    cout <<  "-";
                                    rabbitCount = rabbitCount+1;
                            }
                            cout << "H";

                    }

                    if(rabbitPositions < turtlePositions)
                    {
                            while(rabbitCount < rabbitPositions)
                            {
                                    cout << "-";
                                            rabbitCount = rabbitCount+1;
                            }
                            cout << "H";

                            while(turtleCount < (turtlePositions - rabbitPositions))
                            {
                                    cout << "-";
                                    turtleCount = turtleCount+1;
                            }
                            cout << "T";

                            cout << "\n";
                    }
            }
    }

    void printWinner(int rabbitPosition, int turtlePosition)
    {
            if(turtlePosition >= 70 && rabbitPosition < 70)
            {
                    cout << "TORTOISE WINS!!! YAY!!!\n";
            }
            else if(rabbitPosition >=70 && turtlePosition < 70)
            {
                    cout << "Hare wins. Yuch.\n";
            }
            else if(rabbitPosition >=70 && turtlePosition >=70)
            {
                    cout << "It's a tie\n";
            }
    }

    void tie(int turtlePosition, int rabbitPosition)
    {
            if(rabbitPosition >=70 && turtlePosition >=70)
                    executeRace();
    }
};

int main()
{
  Race race;
  race.executeRace();
  return EXIT_SUCCESS;
}

*当然,除非是处理更高级的语言,比如微积分!

票数 8
EN

Stack Overflow用户

发布于 2009-02-09 01:01:55

编译器选项:

代码语言:javascript
复制
g++ -o Race Race.cc

您还可以在Race::main函数中声明函数

代码语言:javascript
复制
class Race
{
  public:
     void main()
     {

        executeRace();
     } // <----- add this
票数 3
EN

Stack Overflow用户

发布于 2009-02-09 01:00:46

我认为你应该使用gcc -o ...,而不是gcc o- ...

其次,你不能在C++中用函数来定义函数。

将另一个函数定义移到void main()类之外:具体地说,您需要将int main()之前的倒数第二个大括号移到紧接int randomMove()之前。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/526817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档