Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

static метод из другого проекта

9.0K
31 октября 2007 года
RedNN
33 / / 15.08.2006
Проект в VS2003 включает в себя ещё несколько проектов (все на С++). В одном из них реализован шаблон "одиночка". В классе есть статический метод
static CSingletone* GetInstance();
Пытаюсь добраться до класса из другого проекта. h-ник проинклюдил. В релизе всё собирается нормально. При попытке собрать в дебаге выдается:
Compiler error LNK2019: unresolved external symbol "public: static class CSingletone * __cdecl СSingletone::GetInstance(void)" (?GetInstance@CSingletone@@SAAAV1@XZ) referenced in function _main
Подскажите пожалуйста, в чом косяк.
240
31 октября 2007 года
aks
2.5K / / 14.07.2006
Ну первое что в голову приходит - реализация в .cpp файле который не добавлен в проект. не знаю почему в релизе собирается - но причин пожет быть много - тупо исключенно ifdef-ами хотябы.

Ну или как вариант - релизной конфигурации в настройках проекта прописанны пути до *.h файлов с реализацией, а в дебажной нет.

Вобщем без проекта не разберешся. )
9.0K
01 ноября 2007 года
RedNN
33 / / 15.08.2006
Нашёл: в свойствах проекта: С/C++ -> Advanced -> Calling Convention было включено "__cdecl (/Gd)". Если включить "__stdcall (/Gz)" то всё собирается.
Параметр был найден путём сравнения настроек дебага и релиза.
Объясните пожалуйста, что это за фигня и в чом отличия?
309
02 ноября 2007 года
el scorpio
1.1K / / 19.09.2006
А... есть такая фишка.
Если способ вызова функции не прописывать явно [TResult __fastcall Function (TParams Params)], то при дальнейшем использовании данной функции в другом проекте обязательно будет указан иной способ вызова "по-умолчанию"
Линковщик пытался искать в ранее скомпилированной библиотеке (пакете) функцию с порядком параметров __cdecl, но там была только функция со "стандартным" порядком (__stdcall). Естественно, процесс сборки программы обламывался ошибкой "отсутсвует код функции"
Отсюда вывод - всегда указывать способ вызова функций.
240
02 ноября 2007 года
aks
2.5K / / 14.07.2006
Цитата: el scorpio

Отсюда вывод - всегда указывать способ вызова функций.


И жертвовать переносимостью и универсальностью кода? )

534
02 ноября 2007 года
HarryAxe
448 / / 19.01.2006
Цитата: aks
И жертвовать переносимостью и универсальностью кода? )


#define MYAPI __stdcall
int MYAPI SomeProc();

Нормальный ход действий при разработке библиотек. Где жертвы?

240
03 ноября 2007 года
aks
2.5K / / 14.07.2006
Цитата: HarryAxe

Где жертвы?


Здесь нет если есть возможность при пересборках легко менять этот макрос и если обязательно нужна эти модификаторы.

Если же писать перед каждой функций эти способы вызова - жертвы самые реальные )

9.0K
06 ноября 2007 года
RedNN
33 / / 15.08.2006
Ясно. Спасибо за ответ.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог