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