C++ функция, ранее объявленная

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

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 ответа

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

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

Написать:

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

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

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

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

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

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

В 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;
}
Другие вопросы по тегам