Здравствуйте, KARALIUS, Вы писали:
KAR>Помогие понять. Вот на 64-битном СДК от майкрософта не могу скомпилить их же MFC-шный код, который лежит в 64-битном include: KAR>
KAR>template<class KEY, class ARG_KEY, class VALUE, class ARG_VALUE>
KAR>typename CMap<KEY, ARG_KEY, VALUE, ARG_VALUE>::CAssoc* // CAssoc - это имя типа в контексте CMap<.....>
KAR>CMap<KEY, ARG_KEY, VALUE, ARG_VALUE>::NewAssoc()
KAR>{
KAR>...
KAR>}
KAR>
Это связано не с 64-битностью, а с переездом на новый, более требовательный компилятор.
(Он тебе в первом же сообщении об ошибке на это намекнул.)
Может, там нужно какую-то опцию или прагму включить для обратной совместимости по дебилизации компилятора?
Здравствуйте, Кодт, Вы писали:
К>Здравствуйте, KARALIUS, Вы писали:
KAR>>Помогие понять. Вот на 64-битном СДК от майкрософта не могу скомпилить их же MFC-шный код, который лежит в 64-битном include: KAR>>
KAR>>template<class KEY, class ARG_KEY, class VALUE, class ARG_VALUE>
KAR>>typename CMap<KEY, ARG_KEY, VALUE, ARG_VALUE>::CAssoc* // CAssoc - это имя типа в контексте CMap<.....>
KAR>>CMap<KEY, ARG_KEY, VALUE, ARG_VALUE>::NewAssoc()
KAR>>{
KAR>>...
KAR>>}
KAR>>
К>Это связано не с 64-битностью, а с переездом на новый, более требовательный компилятор. К>(Он тебе в первом же сообщении об ошибке на это намекнул.) К>Может, там нужно какую-то опцию или прагму включить для обратной совместимости по дебилизации компилятора?
Не совсем понял... Вот, например
template<class TYPE, class ARG_TYPE>
class CList : public CObject
{
protected:
struct CNode
{
CNode* pNext;
CNode* pPrev;
TYPE data;
};
И так далее...
а потом
template<class TYPE, class ARG_TYPE>
void CList<TYPE, ARG_TYPE>::FreeNode(CList::CNode* pNode)
Куда вставить этот typename?
Я не силен в STL'е, так что не обессудьте если вопрос глупый.
Здравствуйте, KARALIUS, Вы писали:
KAR>Куда вставить этот typename? KAR>Я не силен в STL'е, так что не обессудьте если вопрос глупый.
Действительно, я мало-мало перебдел. Здесь typename не нужен. (Кстати, это относится не к STL, а к синтаксису языка).
По этому поводу компилятор сообщил всего лишь warning.
Возможно, ошибка в другом.
Я не сразу обратил внимание на вот этот симптомчик:
error C2143: syntax error : missing ';' before '*'
Такое чаще всего бывает, когда в одном из заголовочников забыли поставить ";" после объявления класса... или чего-нибудь в таком роде.
Посмотри, что у тебя включено перед afxtempl.h — на предмет криминала.
Поменяй порядок включений.
Кстати, еще о 64-бит, Microsoft, AMD64 и пр.
В новом crt, куда они приложили и слегка поменянный STL, из auto_ptr пропала операция reset(). А из basic_string — функция clear()
Заодно пропали stdext::hash_set & hash_map.
Никаких объяснений по этому поводу я не нашел. В чем может быть дело — я плохо искал, или об этом говорили раньше?