Я неопытный студент, и это было частью опубликованного решения нашего задания по программированию на C ++. Но он не компилируется на моем компьютере, и мне нужна помощь, чтобы понять, почему. Первое сообщение об ошибке, с которым я столкнулся, было в sprintf_s (), в котором говорилось, что «идентификатор« sprintf_s »не объявлен», что, как мне кажется, связано с тем, что я запускаю linux, а sprintf_s () не является стандартным lib fun c. Таким образом, я попытался заменить его на snprintf (), и исходное сообщение об ошибке исчезло (но, пожалуйста, дайте мне знать, если это не так, мое изменение закомментировано выше исходной строки).
После изменения я получил сообщение об ошибке «аргумент типа« const char * »несовместим с параметром типа« size_t »», а «float» несовместим с параметром типа «const char *» ». Я понимаю, что параметры для sprintf_s () и snprintf () равны (char *str, size_t size, const char *format, ...)
, поэтому я думаю, что ошибка имеет смысл, поскольку в передаваемых аргументах отсутствует размер. Но если должен быть аргумент для размера, то будет ли правильно установить его как 128? И почему это работает без аргумента на Windows машине моего учителя для sprintf_s (), а не на Linux для snprintf ()? Кроме того, он использует Visual Studio, я использую код Visual Studio.
Вся функция показана ниже. Если вам известна другая причина, по которой у меня могут возникнуть проблемы с компиляцией того, что должно быть рабочим решением, пожалуйста, дайте мне знать!
bool myNode::isAccessible()
{
return isAccessible(x, y);
}
myNode::myNode(const float location[3])
{
x = (location[0] > 0.0) ? (int)floor(location[0] / SCALE + 0.5f) : (int)ceil(location[0] / SCALE - 0.5f);
y = (location[1] > 0.0) ? (int)floor(location[1] / SCALE + 0.5f) : (int)ceil(location[1] / SCALE - 0.5f);
if (isAccessible(x, y)) return;
int originalX = x, originalY = y;
for (int a = -1; a <= 1; a++)
for (int b = -1; b <= 1; b++) {
if (a == 0 && b == 0) continue;
x = originalX + a;
y = originalY + b;
if (isAccessible(x, y)) return;
}
char buffer[128];
//snprintf(buffer, "***AStarNode: could not find any isAccessible node for (%f, %f, %f)***", location[0], location[1], location[2]);
sprintf_s(buffer, "***AStarNode: could not find any isAccessible node for (%f, %f, %f)***", location[0], location[1], location[2]);
controlPanel->addMessage(buffer);
}