стенли, жози & c++ bilder

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

dimlevnik
Сообщения: 12
Зарегистрирован: 07 июн 2004, 15:42

Беру пример кода из книжки, создаю консольное приложение в билдере, на строчке vector<string,allocator> выдаёт ошибку
E2299 Cannot generate template specialization from 'vector<_Tp,_Alloc>'
в чём моя ошибка
(<vector> и <string> я подключил)
Конструктор
Сообщения: 35
Зарегистрирован: 12 май 2004, 15:34
Откуда: Москва

А зачем тебе allocator?
Напиши просто vector <string> somevar;
dimlevnik
Сообщения: 12
Зарегистрирован: 07 июн 2004, 15:42

ну, я по книжке хотел проверить.
ну а в общем я не против
но как то странно если в книжке написано так значит должно компилиться
а вы как думаете?
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Тогда нужно allocator тоже подключать. Это ведь тоже класс :)
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
dimlevnik
Сообщения: 12
Зарегистрирован: 07 июн 2004, 15:42

имеешь в виду вот так
#include <allocator>

или как?
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Я ничего конкретного не имею ввиду. Я никогда особо не увлекался Билдером и о том, что это за класс - vector, могу лишь догадываться, прекрасно разбираясь в Майкросовтовском STL'е. Зделав предыдущее замечание, я просто указал тебе причину ошибки опираясь на знания С/C++. Как решить проблему придётся выяснить тебе самому. В конце-концов просто залесь в хеадер класса vector и посмотри что к чему. Неужели в этом так сложно разобраться...
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
dimlevnik
Сообщения: 12
Зарегистрирован: 07 июн 2004, 15:42

для меня пока ещё да, взрощенный на паскале и делфи, я ещё как маленький ребёнок пытаюсь уловить тонкости синтаксиса и семантику такого великого и могучего языка как C++
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

:) Ну если дело обстоит именно так, то поможем. Только коментируй вслух возникающие проблемы.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Конструктор
Сообщения: 35
Зарегистрирован: 12 май 2004, 15:34
Откуда: Москва

Romeo, собственно Билдер тут не причем насколько я понял. Вопрос из области STL которая по идее входит в стандарт С++.
Посему vector это контейнерный класс из STL.

В справке по vector подразумеваеся, что allocator писать не надо, так как он создается автоматически как шаблон от первого параметра.

Конкретно там написано:

template <class T, class Allocator = allocator<T> >
class vector;

Вероятно allocator надо применять когда надо изменить способ размещения вектора в памяти.


Короч не над чем тут париться :) Надо просто писать vector<string> :)
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Конструктор, следи за терминами... :) В стандарт С++ STL никогда не входил и входить не будет. Стандарт этот разработан добрых десяток лет назад и подразумевает лишь синтаксические правили языка. Каждый отдельный производитель компилятора, будь то Borland, Microsoft или Watcom, обязан заботится о том, чтобы программы, написанные по всем правилам стандарта "понимались" их компилятором (но ничего не мешает им пополнить синтакисическое множество языка своми "наворотами"). Эти же производители поставляют и стандартный набор библиотек для своих компиляторов, одной из которых является STL. (STL'ей, кстати, тоже существует тьма тьмущая. Какой именно Standart Template Library пользоваться - вопрос принципов или пристрастий конечного программиста).
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Ответить