VS и предкомпиляция

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
Skwoogey
Сообщения: 63
Зарегистрирован: 11 янв 2016, 02:25

14 мар 2017, 00:30

начал делать проект в VS17 (консольное win32). Он мне дал stdafx, когда я прочитал, что это такое, решил попробовать реализовать с предкомпиляцией, чтобы было. Решил проверить работоспособность одного из конструкторов. Он мне дает ошибку LNK2109 "ссылка на неразрешенный внешний символ". stackoverflow не помог. Нужна помощь.

-все лежит в проекте. (это точно)
-включения заголовков вроде правильно раскидал. (это неточно)
-очищал и пересобирал проект много раз

ничего не работает.
Skwoogey
Сообщения: 63
Зарегистрирован: 11 янв 2016, 02:25

14 мар 2017, 00:35

Вот все файлы.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

14 мар 2017, 01:33

При чём тут stdafx.h? Проблема в другом. Для того, чтобы компилятор мог сгенерировать тела методов класса matrix, они (тела) должны быть доступны из того места, где происходит инстанцирование шаблона. Иными словами, то что расположено в matrix.cpp, должно быть расположено в matrix.h. Спорим, когда у тебя всё располагалось в одном файле, то всё работало? :)

Вообще рекомендую почитать подробнее про шаблоны. Гугл в помощь.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Skwoogey
Сообщения: 63
Зарегистрирован: 11 янв 2016, 02:25

14 мар 2017, 05:35

Так это шаблоны мне жизнь портят. Что их выносить нельзя, не знал. Получается мне .cpp вообще не нужен или с хедером его оставить?

Спасибо.
Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

14 мар 2017, 08:53

Так как хедер кроме объявления шаблона больше ничего не содержит, то смысла разделять шаблонный класс на два файла нет никакого. Вот если бы хедер содержал что-то ещё, и это что-то могло потребоваться в другом месте проекта, где шаблонный класс не будет использоваться, вот тогда разделять можно. В таком случае файлу с определениями методов шаблонного класса частенько дают расширение hxx и инклюдят его только в тех местах, где есть инстанцирование шаблона.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Ответить