![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Дрон |
|
||||||||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 10 Всего: 93 |
Есть класс MethodContainer являющийся шаблоном с одним параметром.
Два других класса ScriptClass и ScriptEngine наследуются от него и находятся в файлах с соответствующими именами (вообще у меня все классы раскиданы по разным файлам, всего классов пока 9 и они довольно много общаются друг с другом).
Так вот я сначала задолбался расставлять #include, т.к. при некоторых комбинациях компилиться не хотело вообще с какими-то бредовыми сообщениями об ошибках. А теперь компилится, а на этапе линковки ругается на все методы из MethodCaller как unresolved externals. Это в VS2002. Пробовал в Visual C++ 6.0 тот вообще с ума сходит -- выдаёт ошибку за ошибкой, причём в STL классах Ещё. Выкинул оба пронаследованных класса и добавил один класс Test
Чувствую, что проблема в может быть в #include. Но какая? ЗЫ: На Builder перейти не предлагать Это сообщение отредактировал(а) Дрон - 31.8.2004, 23:54 -------------------- Да. Именно так. |
||||||||
|
|||||||||
| Manve |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 84 Регистрация: 30.7.2004 Репутация: нет Всего: 1 |
А какие ошибки с инклудами компилятор писал?
StaticMethod и scriptMethod - это классы? |
|||
|
||||
| Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 10 Всего: 93 |
Да, классы.
Ошибки были не с инклудами, а внутри кода он не видел некоторых типов, хотя соответствующий инклуд был. Вот, например, если добавить в sciptengine.h инклуд scriptable.h То в файле scriptclass.cpp вылазит, что "'Fields' is not a member of 'Scriptable'" что есть полнейший бред Кроме того он "забывает" класс Variable и т.д. Это сообщение отредактировал(а) Дрон - 31.8.2004, 22:19 -------------------- Да. Именно так. |
|||
|
||||
| Manve |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 84 Регистрация: 30.7.2004 Репутация: нет Всего: 1 |
вышли мне свой код на bigman777<sobaka>rambler.ru Я посмотрю и попытаюсь ченить решить, а то я так ни хрена не въежаю
|
|||
|
||||
| Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 10 Всего: 93 |
Ok! Выслал.
Мож, конечно, я просто где-то жутко стормозил... Но почему же в Борланде работает??? -------------------- Да. Именно так. |
|||
|
||||
| Manve |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 84 Регистрация: 30.7.2004 Репутация: нет Всего: 1 |
Линкер пишет, что нет реализации GetMethod в ScriptMethod (модуль ScriptClass). Копай в эту сторону, что то ты явно перемудрил с ООП
Добавлено @ 00:14 Вобщем закоментировал все строки где вызывается GetMethod и получил вот это:
Это сообщение отредактировал(а) Manve - 1.9.2004, 00:05 |
|||
|
||||
| Manve |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 84 Регистрация: 30.7.2004 Репутация: нет Всего: 1 |
То что компидятор ругается на STL в debug режиме - это он тебя предупреждает что он обрезает все названия переменных до 255 символов (во дибил тама таких имен даже нету
|
|||
|
||||
| Manve |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 84 Регистрация: 30.7.2004 Репутация: нет Всего: 1 |
Усе, я твой код откомпилил, просто закоментировав вызовы функции GetMethod в модуле ScritpClass и убрал деструктор в классе MethodContainer.
Может там есть свои какие-то свои фички работы с классами. |
|||
|
||||
| chipset |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
Дрон
Можешь мне тоже выслать плз, поломаю голову? chipset3 Это сообщение отредактировал(а) chipset - 1.9.2004, 06:53 --------------------
|
|||
|
||||
| Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 10 Всего: 93 |
Ну я так тоже могу В крайнем случае хрен с ним: сделаю без шаблона, боюсь только как бы потом опять ещё чего-нибудь не вылезло. chipset Всё. Отправил. -------------------- Да. Именно так. |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 17 Всего: 110 |
ну и мне за компанию
-------------------- qqq |
|||
|
||||
| DENNN |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 1 Всего: 43 |
Сколько раз уже было сказано, что при создании шаблона весь код должен находится в заголовочном файле |
|||
|
||||
| Дрон |
|
||||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 10 Всего: 93 |
Пробовал Начинает ругаться на всё подряд. Например:
Пишет: type 'int' unexpected 'i' undeclared identifier 'iterator' undeclared identifier 'pair' undeclared identifier и т.д. А почему, кстати, всё надо в заголовочный? Это сообщение отредактировал(а) Дрон - 1.9.2004, 10:50 -------------------- Да. Именно так. |
||||
|
|||||
| Олег М |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 436 Регистрация: 10.6.2004 Где: Москва Репутация: 7 Всего: 7 |
А что это вообще такое? Здесь, насколько я понимаю ты создаёшь класс std::pair<string,int>. В конструкторе должно быть два аргумента pair<string,int>("wer",10); Иля ты итератор пытаешься к pair преобразовать? Тебе, наверное, надо просто i->second. Как у тебя MethodsMap объявлен? |
|||
|
||||
| DENNN |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 1 Всего: 43 |
тогда уж make_pair использовать.
Вобще чем больше смотришь на этот кусок кода, тем меньше идей, где такое можно использовать. |
|||
|
||||
| Дрон |
|
||||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 10 Всего: 93 |
Вот, короче, весь файл:
В common.h определены такие вещи как bool_t, string_t и т.п. А вот чего говорит компилятор:
Олег М Так в примерах было написано Добавлено @ 11:17 maxim1000 Чего-то на твой ящик отсылаться не хочет Это сообщение отредактировал(а) Дрон - 1.9.2004, 11:26 -------------------- Да. Именно так. |
||||
|
|||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 17 Всего: 110 |
потому, что шаблоны не компилируются... компилируются только их специализации для каждого типа отдально -------------------- qqq |
|||
|
||||
| Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 10 Всего: 93 |
Это сообщение отредактировал(а) Дрон - 1.9.2004, 11:49 -------------------- Да. Именно так. |
|||
|
||||
| Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 10 Всего: 93 |
Всё. Откомпилировалось.
Такого со мной ещё не было. Старею, видать У меня объявлен тип MethodMap, а потом я пишу MethodsMap (а VisualAssistX ещё и его как класс подсвечивает) Это ж надо до такого дойти... Олег_М Ты, кстати, прав. Я ещё раз глянул пример -- действительно можно просто i->second. Всем спасибо ЗЫ: А борланд, видать, хитрый компилятор -- он глянул, что я нигде не создаю объектов такого типа и не стал вообще с ними связываться -------------------- Да. Именно так. |
|||
|
||||
| Manve |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 84 Регистрация: 30.7.2004 Репутация: нет Всего: 1 |
Я в твоем коде толком не ковырялся (времени не было), потому и зделал такое нелепое предположение. |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
Здесь может быть баг:
#ifndef INCLUDED_METHODCONTAINERH #define INCLUDED_METHODCONTAINERH константы препроцессора, которые начинаются не с символа подчёркивания, НЕ ВИДНЫ за пределами файла -- соответственно, такое "предохранение" от повторного инклюда при компиляции не срабатывает. Замени на: #ifndef _INCLUDED_METHODCONTAINERH #define _INCLUDED_METHODCONTAINERH -------------------- ![]() |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 17 Всего: 110 |
А защита делается только от повторного включения в ОДИН и тот же файл *.cpp. По сути после выполнения команды #include получается один большой файл, поэтому все #define'ы, которые сделаны в h-файле, будут выполнены уже в этом большом файле, а значит и видны в нем же попробовал два раза подключить один и тот же h-файл - даже без подчеркивания защита от дублирования вроде бы работает (VC++6.0) -------------------- qqq |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |