![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| sol78 |
|
||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 366 Регистрация: 7.7.2007 Репутация: 1 Всего: 0 |
помогите найти ошибку при использовании макросов...
Я пишу что то вроде рефлекшн (паттерн виртуальний конструктор) наследники класса RTOC получаут возмозность использовать рефлек. для етого они должни пройти регистрацию...
класс наследник от RTOC, для регистрации должен вызвать смачала тут макрос RTOC_DECLARATION(X);
и потом тут RTOC_DEFINITION(X);
в идеале эта схема должна использоваться для организации рефлекшн вот так:
но не работает дает ошибку при вызове макроса((((((???????? |
||||||||
|
|||||||||
| sol78 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 366 Регистрация: 7.7.2007 Репутация: 1 Всего: 0 |
Auuu
|
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Ау, ошибку-то давай. И номер строки. |
|||
|
||||
| Dennnis |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 145 Регистрация: 23.3.2008 Репутация: нет Всего: 4 |
В том коде который ты сдесь привет ошибок нет. Может ошибка в реализации методов
void addInstanceClass(RTOC* p); void copyTable(RTOC** newTable); static RTOC* SearchInstanceByName(const char* class_name); RTOC(RTOC* p=0); static RTOC* getInstanceByName(const char* class_name); или в Registration. Вот это у меня работает.
--------------------
Get Rich or Die Tryin' |
|||
|
||||
| sol78 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 366 Регистрация: 7.7.2007 Репутация: 1 Всего: 0 |
Вот ошибки:
D:\MSDev98\MyProjects\RTOC\X.CPP(3) : error C2270: 'getClassID' : modifiers not allowed on nonmember functions D:\MSDev98\MyProjects\RTOC\X.CPP(3) : error C2270: 'getInstance' : modifiers not allowed on nonmember functions D:\MSDev98\MyProjects\RTOC\X.CPP(3) : warning C4355: 'this' : used in base member initializer list D:\MSDev98\MyProjects\RTOC\X.CPP(3) : error C2673: 'X' : global functions do not have 'this' pointers D:\MSDev98\MyProjects\RTOC\X.CPP(3) : error C2550: 'X' : constructor initializer lists are only allowed on constructor definitions D:\MSDev98\MyProjects\RTOC\X.CPP(3) : warning C4508: 'X' : function should return a value; 'void' return type assumed Error executing cl.exe. X.OBJ - 4 error(s), 2 warning(s) падает на строке: RTOC_DEFINITION(X); в файле X.CPP Кроме того, ошибка - нужно как то вызывать этот виртуальний конструктор типа того:
где это лучше сделать? Это сообщение отредактировал(а) sol78 - 26.4.2008, 21:11 |
|||
|
||||
| sol78 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 366 Регистрация: 7.7.2007 Репутация: 1 Всего: 0 |
Проблема с компиляцией решена!
Путем исправления макроса :
Теперь мне нужно знать где этот конструктор лучше вызвать? |
|||
|
||||
| sol78 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 366 Регистрация: 7.7.2007 Репутация: 1 Всего: 0 |
Вопрос остается не решенным....
Где и каким способом вызывать этот коструктор, интуитивно - это должно происходить из макроса типа того:
но где это лучше сделать? может ктото писал уже такие формы??? |
|||
|
||||
| chipset |
|
||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
ИМХО лучше
Тогда очевидно (или я чтото упустил?) не придеца плодить вот такие what-the-fuck'и:
Это раз. А во вторых, я думаю наилучшим решение была бы замена addInstanceClass на две функции типа addConstructedInstance и addLazyInstance. В первом случае ктр вызывается в addInstance класс, во втором при getInstanceByName("X"); Единственная серьёзная проблема у тебя это параметризация конструкторов. И вообще применимость. Я не вижу где собираются методы и параметры классов? --------------------
|
||||||
|
|||||||
| sol78 |
|
||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 366 Регистрация: 7.7.2007 Репутация: 1 Всего: 0 |
зависит от реализации...
не вижу смысла...обьясни?
тут вообще не понятно... моя проблема состоит в том...что юзеру нужно придоставить возможность регистрации, но так чтобы он не имел доступ к реализации методов отвечающих за регистрацию... Я решила эту проблему с помощью макросов:
осталось только не зависимым от юзера способом вызывать эти методы я это делаю через конструктор. Осталось как то вызвать этот конструктор...???? |
||||||||
|
|||||||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 8 Всего: 72 |
А почему не пользуетесь template?
|
|||
|
||||
| sol78 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 366 Регистрация: 7.7.2007 Репутация: 1 Всего: 0 |
math64, таковы были условия проекта
|
|||
|
||||
| sol78 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 366 Регистрация: 7.7.2007 Репутация: 1 Всего: 0 |
Проблему вызова решла через статически обьект класса:
но заметила такую гадасть.... char* CLASS::getClassID()const\ {\ return "CLASS" ;\ }\ привызове этой функ. она мне возращает "CLASS",а мне нужно что то вроде "Х" где может быть ошибка? |
|||
|
||||
| Mayk |
|
|||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
вместо "CLASS" пиши #CLASS. В строковых литералах макросы не заменяюцца. -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |