C ++ функция, ранее объявленная - PullRequest
0 голосов
/ 10 апреля 2011

Я делаю программу для линейных кораблей для части курсовой работы и отлаживаю развертывание игрока. Я обнаружил ошибку, которую не могу найти, или могу найти решение:

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();  

Вот вершина функции:

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 ]

2 голосов
/ 10 апреля 2011

int vert(*shipx, shiptype) { .. } не сообщает типы параметров.

Вы забыли сообщить нам полную ошибку (которая охватывает несколько строк), но я подозреваю, что она сказала, что предыдущее объявление делаетне соответствует определению.

Пишите:

int vert(int* shipx, string shiptype) { .. }
1 голос
/ 10 апреля 2011

Вам необходимо включить типы и имена параметров в определение функции:

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

Вы должны также привести имена параметров в соответствие между прототипами и определениями.

0 голосов
/ 10 апреля 2011

int vert(int *shipx, std::string shiptype) должно быть таким, как должно выглядеть определение в третьем сером поле, измените hor также

0 голосов
/ 10 апреля 2011

В этом сообщении не упоминается ошибка, которую вы указали. Но есть еще одна проблема с вашим кодом, на которую я хочу обратить внимание, предлагая вам и ее решение.

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

Это не скомпилируется.

Я бы предложил вам определить перечисление ShipType, как:

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

А затем объявите shiptype типа 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;
}
...