在此范围/错误中未声明C ++ /'string'

时间:2012-07-24 19:39:47

标签: c++ string function switch-statement

我正在制作一个跟踪高尔夫球状态的程序,所以我需要制造球员。我做了一个名为

的函数

getPlayer(int playerNum);

并且在其中我拥有所有这些代码

switch(playerNum)
case 1: return(player1);break;
case 2: return(player2);break;
case 3: return(player3);break;
case 4: return(player4);break;
case 5: return(player5);break;
case 6: return(player6);break;
case 7: return(player7);break;
case 8: return(player8);break;
case 9: return(player9);break;
case 10: return(player10);break;

和我的playermanager.h

    #ifndef PLAYERMANAGER_H
    #define PLAYERMANAGER_H
    #include <string>

    class playerManager
    {
    public:
        playerManager();
        std::string getPlayer(int playerNum);
    private:
        std::string player1;
        std::string player2;
        std::string player3;
        std::string player4;
        std::string player5;
        std::string player6;
        std::string player7;
        std::string player8;
        std::string player9;
        std::string player10;
    };

    #endif // PLAYERMANAGER_H

现在,当我运行此操作时,我收到了错误

    'player1' was not declared in this scope

我也得到了错误

    break statement not within loop or switch 

它从玩家1到玩家10继续前进。 我通过调用文件读取器函数来智能化字符串。我对c ++很陌生,我可能正在做一些愚蠢的错误,所以如果有人可以帮忙请。 提前谢谢!

4 个答案:

答案 0 :(得分:4)

离开codereview的东西 -

你有没有机会实施

std::string getPlayer(int playerNum);

而不是

std::string playerManager::getPlayer(int playerNum);

另外 - switch

switch(playerNum)
{
case 1: return(player1);break;
case 2: return(player2);break;
case 3: return(player3);break;
case 4: return(player4);break;
case 5: return(player5);break;
case 6: return(player6);break;
case 7: return(player7);break;
case 8: return(player8);break;
case 9: return(player9);break;
case 10: return(player10);break;
}

除此之外 - 糟糕的代码。想象一下,我是你的客户并且告诉你我想要11个玩家而不是10个。那么呢?

答案 1 :(得分:1)

可能是一些不同的东西,但可能是你想要这个:

std::string playerManager::getPlayer(int playerNum) //<- here you need the class name
{
    switch(playerNum)
    { 
    //^- and here you don't show  the { and } in your example, and this could be the
    // reason for the "break statement not within loop or switch" error

        case 1: return(player1);break;
        case 2: return(player2);break;
        case 3: return(player3);break;
        case 4: return(player4);break;
        case 5: return(player5);break;
        case 6: return(player6);break;
        case 7: return(player7);break;
        case 8: return(player8);break;
        case 9: return(player9);break;
        case 10: return(player10);break;
    }
}

也就是说,使用数组(或向量)可能是更好的解决方案。

答案 2 :(得分:0)

您在getPlayer()函数中显示了以下代码:

switch(playerNum) 
case 1: return(player1);break; 
case 2: return(player2);break; 
case 3: return(player3);break; 
case 4: return(player4);break; 
case 5: return(player5);break; 
case 6: return(player6);break; 
case 7: return(player7);break; 
case 8: return(player8);break; 
case 9: return(player9);break; 
case 10: return(player10);break; 

此代码不在函数内。我假设您没有发布几行显示它所在的功能。请执行此操作以便我们为您提供进一步的帮助。

此外,由于您使用的是播放器列表,您应该考虑学习如何使用STL中的数组或容器(例如std :: vector)。

答案 3 :(得分:0)

不要为不同的玩家使用开关,而是尝试为玩家制作动态分配的数组,这样你就可以随时添加或制作指针,然后在背景中保持一个int以告知有多少玩家,或者不管。