Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> unresolved externals, VS 2002 
:(
    Опции темы
Дрон
Дата 31.8.2004, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 10
Всего: 93



Есть класс MethodContainer являющийся шаблоном с одним параметром.
Код
template <class T> class MethodContainer
Этот класс находится в файлах MethodContainer.cpp и MethodContainer.h.
Два других класса ScriptClass и ScriptEngine наследуются от него и находятся в файлах с соответствующими именами (вообще у меня все классы раскиданы по разным файлам, всего классов пока 9 и они довольно много общаются друг с другом).
Код
class ScriptEngine: public MethodContainer<StaticMethod>
и
Код
class ScriptClass: public MethodContainer<scriptMethod>
Оба производных класса должны вызывать методу друг-друга.
Так вот я сначала задолбался расставлять #include, т.к. при некоторых комбинациях компилиться не хотело вообще с какими-то бредовыми сообщениями об ошибках.
А теперь компилится, а на этапе линковки ругается на все методы из MethodCaller как unresolved externals.
Это в VS2002. Пробовал в Visual C++ 6.0 тот вообще с ума сходит -- выдаёт ошибку за ошибкой, причём в STL классах smile.gif. Попробовал в C++ Builder 6.0 -- там откомпилировалось и слинковалось без проблем.

Ещё. Выкинул оба пронаследованных класса и добавил один класс Test
Код
class Test: public MethodContainer<int>
Так ведь работает, сволочь!!!

Чувствую, что проблема в может быть в #include. Но какая?

ЗЫ: На Builder перейти не предлагать smile.gif

Это сообщение отредактировал(а) Дрон - 31.8.2004, 23:54


--------------------
Да. Именно так.
PM   Вверх
Manve
Дата 31.8.2004, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 30.7.2004

Репутация: нет
Всего: 1



А какие ошибки с инклудами компилятор писал?

StaticMethod и scriptMethod - это классы?
PM   Вверх
Дрон
Дата 31.8.2004, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 10
Всего: 93



Да, классы.

Ошибки были не с инклудами, а внутри кода он не видел некоторых типов, хотя соответствующий инклуд был.

Вот, например, если добавить в sciptengine.h инклуд scriptable.h
То в файле scriptclass.cpp вылазит, что "'Fields' is not a member of 'Scriptable'" что есть полнейший бред sad.gif
Кроме того он "забывает" класс Variable и т.д.

Это сообщение отредактировал(а) Дрон - 31.8.2004, 22:19


--------------------
Да. Именно так.
PM   Вверх
Manve
Дата 31.8.2004, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 30.7.2004

Репутация: нет
Всего: 1



вышли мне свой код на bigman777<sobaka>rambler.ru Я посмотрю и попытаюсь ченить решить, а то я так ни хрена не въежаю smile.gif
PM   Вверх
Дрон
Дата 31.8.2004, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 10
Всего: 93



Ok! Выслал.

Мож, конечно, я просто где-то жутко стормозил... Но почему же в Борланде работает???


--------------------
Да. Именно так.
PM   Вверх
Manve
Дата 1.9.2004, 00:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 30.7.2004

Репутация: нет
Всего: 1



Линкер пишет, что нет реализации GetMethod в ScriptMethod (модуль ScriptClass). Копай в эту сторону, что то ты явно перемудрил с ООП smile.gif. А все остальное это куча warning, неплохо было бы и их тож просмотреть и поискать что к чему. Правда если компилить проект в Release то они исчезают и не мозолят глаза. smile.gif
Добавлено @ 00:14
Вобщем закоментировал все строки где вызывается GetMethod и получил вот это:
Цитата
error LNK2001: unresolved external symbol "public: virtual __thiscall MethodContainer<class ScriptMethod>::~MethodContainer<class ScriptMethod>(void)" (??1?$MethodContainer@VScriptMethod@@@@UAE@XZ)


Это сообщение отредактировал(а) Manve - 1.9.2004, 00:05
PM   Вверх
Manve
Дата 1.9.2004, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 30.7.2004

Репутация: нет
Всего: 1



То что компидятор ругается на STL в debug режиме - это он тебя предупреждает что он обрезает все названия переменных до 255 символов (во дибил тама таких имен даже нету smile.gif(или я плохо искал biggrin.gif)), так что можешь забить на STL. smile.gif
PM   Вверх
Manve
Дата 1.9.2004, 00:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 30.7.2004

Репутация: нет
Всего: 1



Усе, я твой код откомпилил, просто закоментировав вызовы функции GetMethod в модуле ScritpClass и убрал деструктор в классе MethodContainer. smile.gif Ты явно что-то переборщил с ООП. smile.gif Пробуй разобраться сначала с деструктором, а потом с GetMethod.
Цитата
Попробовал в C++ Builder 6.0 -- там откомпилировалось и слинковалось без проблем.

Может там есть свои какие-то свои фички работы с классами. smile.gif
PM   Вверх
chipset
Дата 1.9.2004, 02:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

Репутация: 27
Всего: 165



Дрон
Можешь мне тоже выслать плз, поломаю голову?
chipset3 hehe.gif mail.ru

Это сообщение отредактировал(а) chipset - 1.9.2004, 06:53


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
Дрон
Дата 1.9.2004, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 10
Всего: 93



Цитата(Manve @ 1.9.2004, 01:37)
Усе, я твой код откомпилил, просто закоментировав вызовы функции GetMethod в модуле ScritpClass и убрал деструктор в классе MethodContainer.  Ты явно что-то переборщил с ООП.  Пробуй разобраться сначала с деструктором, а потом с GetMethod.

Ну я так тоже могу smile.gif А насчёт "переборщил с ООП" -- смешно звучит smile.gif
В крайнем случае хрен с ним: сделаю без шаблона, боюсь только как бы потом опять ещё чего-нибудь не вылезло.

chipset
Всё. Отправил.


--------------------
Да. Именно так.
PM   Вверх
maxim1000
Дата 1.9.2004, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 17
Всего: 110



ну и мне за компанию smile.gif (мыло в профайле)


--------------------
qqq
PM WWW   Вверх
DENNN
Дата 1.9.2004, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 3878
Регистрация: 27.3.2002
Где: Москва

Репутация: 1
Всего: 43



Цитата
Есть класс MethodContainer являющийся шаблоном с одним параметром. Код template <class T> class MethodContainer Этот класс находится в файлах MethodContainer.cpp и MethodContainer.h.

Сколько раз уже было сказано, что при создании шаблона весь код должен находится в заголовочном файле smile.gif

PM ICQ   Вверх
Дрон
Дата 1.9.2004, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 10
Всего: 93



Цитата(DENNN @ 1.9.2004, 11:40)
Сколько раз уже было сказано, что при создании шаблона весь код должен находится в заголовочном файле

Пробовал sad.gif
Начинает ругаться на всё подряд.
Например:
Код
template <class T>
T* MethodContainer<T>::GetMethod(const string_t& Name)
{
   MethodsMap::iterator i = MethodNames.find(Name);
   if(i != MethodNames.end())
   {
       return GetMethod(pair<string_t,int>(*i).second);
   }
   throw EScrException("Method not found");
}

Пишет:
type 'int' unexpected
'i' undeclared identifier
'iterator' undeclared identifier
'pair' undeclared identifier
и т.д.

А почему, кстати, всё надо в заголовочный?

Это сообщение отредактировал(а) Дрон - 1.9.2004, 10:50


--------------------
Да. Именно так.
PM   Вверх
Олег М
Дата 1.9.2004, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 436
Регистрация: 10.6.2004
Где: Москва

Репутация: 7
Всего: 7



Цитата
pair<string_t,int>(*i).second

А что это вообще такое? Здесь, насколько я понимаю ты создаёшь класс std::pair<string,int>. В конструкторе должно быть два аргумента pair<string,int>("wer",10);
Иля ты итератор пытаешься к pair преобразовать? Тебе, наверное, надо просто i->second. Как у тебя MethodsMap объявлен?
PM MAIL ICQ   Вверх
DENNN
Дата 1.9.2004, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 3878
Регистрация: 27.3.2002
Где: Москва

Репутация: 1
Всего: 43



тогда уж make_pair использовать.

Вобще чем больше смотришь на этот кусок кода, тем меньше идей, где такое можно использовать.

PM ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0793 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.