Почему не работает и выдает ошибки С2923 С2061 С2238
template <typename _Ty, typename Allocator = std::allocator<_Ty> >
class C
{
private:
struct Node
{
_Ty Data;
Node* Next;
};
Allocator::rebind<C<_Ty>::Node>::other a;
Node* head;
public:
C() {}
~C() {}
};
int main()
{
C<int> c;
return 0;
};
Выдает ошибку c rebind : Ошибка C2061 синтаксическая ошибка: идентификатор "other". Ничего не понимаю. Подскажите пожалуйста, где ошибка
template <typename _Ty, typename Allocator = std::allocator_traits<std::allocator<_Ty>> >
class C
{
private:
struct Node
{
_Ty Data;
Node* Next;
};
Allocator::rebind_alloc<C<_Ty>::Node> a;
Node* head;
public:
C() {}
~C() {}
};
int main()
{
allocator_traits<allocator<int>>::rebind_alloc<char> a;
C<int> c;
return 0;
};
такая штука к сожалению тоже не работает и выдает :
Ошибка C2061 синтаксическая ошибка: идентификатор "rebind_alloc"
Ответы (1 шт):
...>::other и ...>::Node являются зависимыми именами и по-умолчанию парсятся как имя переменной или функции, чтобы этого избежать необходимо в начале добавить typename. Однако в данном случае это не особо поможет, std::allocator::rebind устарел и удален из текущей версии языка. Также C<_Ty> может не совпадать с текущим экземпляром шаблона, а имена, начинающиеся с _, за которой идет заглавная буква, зарезервированы, а для std::allocator требуется соответствующий include, а ; после окончания функции излишне.