0

我正在为课程作业制作战舰程序,并且正在调试玩家的部署我遇到了一个我无法或找到解决方案的错误:

bb.cpp:12: error: previous declaration of ‘int vert(int*, std::string)’

我已经在我的代码中搜索了任何以前对 int vert 的引用,但找不到任何东西。

这是函数原型

//game function prototypes

int deploy();  
int firing();  
int gridupdte();  
int win = 0;  
int vert(int *x, string sa);  
int hor(int *y, string s);  
int check();  

这是函数vert:

int vert(*shipx, shiptype) //Calculates where the bow of the ship should be (the pointy bit)  
{  
    int shiplen;  
    int bow;

    switch(shiptype) // Determines the length to add to the y co-ordinate
    {
        case "cv" : shiplen = 5; break;
        case "ca" : shiplen = 4; break;
        case "dd" : shiplen = 3; break;
        case "ss" : shiplen = 3; break;
        case "ms" : shiplen = 2; break;
    }

    bow = *shipx + shiplen;

    *shipx = bow;

    return *shipx;
}

int hor (*shipy, shiptype) //Calculates where the bow of the ship should be (the pointy bit)
{
    int shiplen;
    int bow;

    switch(shiptype) // Determines the length to add to the x co-ordinate
    {
        case "cv" : shiplen = 5; break;
        case "ca" : shiplen = 4; break;
        case "dd" : shiplen = 3; break;
        case "ss" : shiplen = 3; break;
        case "ms" : shiplen = 2; break;
    }

    bow = *shipy + shiplen;

    *shipy = bow;

    return *shipy;
}

我知道编译整个代码的其他错误。

4

4 回答 4

2

int vert(*shipx, shiptype) { .. }不告诉参数的类型。

您忽略了告诉我们完整的错误(跨越多行),但我怀疑它说前面的声明与定义不匹配

写:

int vert(int* shipx, string shiptype) { .. }
于 2011-04-10T15:57:19.177 回答
1

您需要在函数定义中包含参数的类型和名称:

int vert (int *shipx, string shiptype) {
...
}

您还应该使原型和定义之间的参数名称匹配。

于 2011-04-10T15:56:50.643 回答
0

这篇文章并没有真正解决您引用的错误。但是我想指出您的代码还有一个问题,建议您也有一个解决方案。

在 C++ 中,switch-case只能有整数常量,不能有字符串字面量。

所以这是错误的:

switch(shiptype) // Determines the length to add to the x co-ordinate
{
    case "cv" : shiplen = 5; break;
    case "ca" : shiplen = 4; break;
    case "dd" : shiplen = 3; break;
    case "ss" : shiplen = 3; break;
    case "ms" : shiplen = 2; break;
}

这不会编译。

我建议您将 enum 定义ShipType为:

enum ShipType
{
    cv,
    ca,
    dd,
    ss,
    ms
};

然后声明shiptypetype ShipType,这样你就可以这样写:

switch(shiptype) // Determines the length to add to the x co-ordinate
{
    case cv : shiplen = 5; break;
    case ca : shiplen = 4; break;
    case dd : shiplen = 3; break;
    case ss : shiplen = 3; break;
    case ms : shiplen = 2; break;
}
于 2011-04-10T15:55:54.397 回答
0

int vert(int *shipx, std::string shiptype)应该是第三个灰色框中的定义应该是什么样子,hor也可以更改

于 2011-04-10T15:57:44.890 回答