Нашел тут описание подобной проблемы, но не нашел лекарства, посему спрашиваю.
Код примерно следующий:
template<class T>
class class1
{
...
class class2
{
void func();
};
...
};
template<class T>
void class1<T>::class2::func()
{
}
Борландом собирается без проблем. А вот в MSVC++ 6.0 вылазит ошибка на стадии линковки. Есть ли какое волшебное слово для побеждения сего?
Здравствуйте, Shishkin, Вы писали:
S>Борландом собирается без проблем. А вот в MSVC++ 6.0 вылазит ошибка на стадии линковки. Есть ли какое волшебное слово для побеждения сего?
Определять функцию-член по месту:
template<class T>
class class1
{
...
class class2
{
void func()
{
}
};
...
};
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Здравствуйте, Shishkin, Вы писали:
S>Здравствуйте, Павел Кузнецов, Вы писали:
ПК>>Определять функцию-член по месту
S>Да это, конечно, выход, но... Очень хочется чтоб все-таки определять отдельно. Некрасиво получается, если определение метода достаточно большое — там уже в описании класса заблудиться можно и все такое... Но уж если нет выхода, тогда, наверное, придется так...
По-другому не получится, т.к. это особенность (баг то есть) VC6. То же самое, кстати, относится и к шаблонам функций-членов:
struct test
{
template <class T>
void func(T t);
};
template <class T> void test::func(T t) {}
"внешнее" определение функции тоже не пройдет.