@obozeetogribochki

Ссылка на неразрешённый внешний символ, что это и как исправить?

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

Вот сам код меню
#include <SFML/Graphics.hpp>
using namespace sf;

void menu(RenderWindow& window) {

	

	Texture menuTexture1, menuTexture2, menuTexture3, aboutTexture, menuBackground;
	menuTexture1.loadFromFile("images/111.png");
	menuTexture2.loadFromFile("images/222.png");
	menuTexture3.loadFromFile("images/333.png");
	aboutTexture.loadFromFile("images/about.png");
	menuBackground.loadFromFile("images/Penguins.jpg");
	Sprite menu1(menuTexture1), menu2(menuTexture2), menu3(menuTexture3), about(aboutTexture), menuBg(menuBackground);
	bool isMenu = 1;
	int menuNum = 0;
	menu1.setPosition(100, 30);
	menu2.setPosition(100, 90);
	menu3.setPosition(100, 150);
	menuBg.setPosition(345, 0);

	//////////////////////////////МЕНЮ///////////////////
	while (isMenu)
	{
		menu1.setColor(Color::White);
		menu2.setColor(Color::White);
		menu3.setColor(Color::White);
		menuNum = 0;
		window.clear(Color(129, 181, 221));

		if (IntRect(100, 30, 300, 50).contains(Mouse::getPosition(window))) { menu1.setColor(Color::Blue); menuNum = 1; }
		if (IntRect(100, 90, 300, 50).contains(Mouse::getPosition(window))) { menu2.setColor(Color::Blue); menuNum = 2; }
		if (IntRect(100, 150, 300, 50).contains(Mouse::getPosition(window))) { menu3.setColor(Color::Blue); menuNum = 3; }

		if (Mouse::isButtonPressed(Mouse::Left))
		{
			if (menuNum == 1) isMenu = false;//если нажали первую кнопку, то выходим из меню 
			if (menuNum == 2) { window.draw(about); window.display(); while (!Keyboard::isKeyPressed(Keyboard::Escape)); }
			if (menuNum == 3) { window.close(); isMenu = false; }

		}

		window.draw(menuBg);
		window.draw(menu1);
		window.draw(menu2);
		window.draw(menu3);

		window.display();
	}
	////////////////////////////////////////////////////
}
  • Вопрос задан
  • 109 просмотров
Пригласить эксперта
Ответы на вопрос 2
Nipheris
@Nipheris Куратор тега C++
Я думаю, что вы создали консольное приложение вместо оконного. Можете пересоздать проект и выбрать Win32 Application в качестве шаблона, и поместить в него ваш код (рекомендую этот вариант), либо попробовать поменять подсистему с Console на Windows в настройках линковщика (скорее всего, ещё и точку входа нужно будет прописать вручну.).
Ответ написан
gdt
@gdt
Программист
Так в виде каких ошибок проблема? Вы приложили сам код меню в качестве ошибок :)
Посмотрите SFML and Visual Studio, у вас правильно настроен проект? В частности, обратите внимание на Configuration Properties/Linker/Input/Additional Dependencies, у вас там должны быть указаны либы SFML. Как вариант, вместо этого в VS можно писать и так:
#pragma comment(lib, "sfml-graphics.lib")
#pragma comment(lib, "sfml-window.lib")
#pragma comment(lib, "sfml-system.lib")


Добавьте этот код между #include и main, попробуйте ещё раз.
Ссылка на неразрешённый внешний символ означает, что вы где-то в коде используете какую-то сущность, для которой есть описание (обычно в header файле, иначе бы у вас ничего не скомпилировалось), а линкер в свою очередь не может найти, где же сама сущность (класс/функция например) с таким описанием. Эти сущности в вашем случае определены в lib-файлах, и они должны быть переданы линкеру сразу после компиляции, чтобы он мог собрать рабочую программу из тех кусков, что у него есть (ваша_программа.obj, lib-файлы из SFML, crt и так далее).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы