Ипользвание инстанцированных шаблонов внутри других классов.
От: eastmen  
Дата: 20.09.02 11:47
Оценка:
Есть слдующий класс, использующий в качестве
поля объект шаблооного класса
#include "bounded_containers.h"

class TFormViewEditMode:
{
    bounded_stack<int> m_stack(23);
                                 ^ здесь ругается                                    компилятор          
public:

};


Компилятор Builder 6.0.
Сообщение следующее:

[C++ Error] TFormViewEditMode.h(27): E2293 ) expected

Если убрать 23 между скобками, то он все съедает.
Если определять объект m_stack вне класса, то все проходит.
Разве в определении класса нельзя использовать
объекты параметризованных классов ?

С уважением Александр.
Re: Ипользвание инстанцированных шаблонов внутри других клас
От: Vasiliy_Krasnokutsky Россия  
Дата: 20.09.02 11:57
Оценка:
Здравствуйте eastmen,
Дык ты же пытаешься его инициализировать внутри описания, а этого делать не следует.
Инициализировать нужно в конструкторе при создании объекта, а не при описании объекта.
Re: Ипользвание инстанцированных шаблонов внутри других клас
От: Павел Кузнецов  
Дата: 20.09.02 12:02
Оценка:
Здравствуйте eastmen, Вы писали:

E>
E>class TFormViewEditMode:
E>{
E>    bounded_stack<int> m_stack(23);
E>                                 ^ здесь ругается компилятор          
E>};
E>


E>[C++ Error] TFormViewEditMode.h(27): E2293 ) expected


Инициализировать члены класса (кроме интегральных статических констант) при объявлении в теле класса нельзя. Для этого предназначены конструкторы класса. Например:

class TFormViewEditMode:
{
    bounded_stack<int> m_stack;

public:
    TFormViewEditMode() : m_stack(23)
    {
    }
};


E>Если убрать 23 между скобками, то он все съедает.


В таком случае, вместо переменной m_stack типа bounded_stack<int> ты объявляешь функцию m_stack, которая не принимает аргументов и возвращает значение типа bounded_stack<int>.

E>Разве в определении класса нельзя использовать объекты параметризованных классов ?


Определять можно, нельзя их инициализировать.
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re: Ипользвание инстанцированных шаблонов внутри других клас
От: orangy Россия
Дата: 20.09.02 12:09
Оценка:
Здравствуйте eastmen, Вы писали:

#include "bounded_containers.h"

class TFormViewEditMode:
{
    bounded_stack<int> m_stack(23);
                                 ^ здесь ругается компилятор          
public:
};

И правильно делает, что ругается. К тому же, что у тебя там за двоеточие такое после имени класса?
В классе ты объявляешь члены, их инициализация осуществляется в конструкторе.
Так будет правильно:

class TFormViewEditMode
{
    bounded_stack<int> m_stack;
public:
    TFormViewEditMode() : m_stack(23) { /* твой код инициализации объекта */ }
};
... << J 1.0 alpha 4 >>
"Develop with pleasure!"
Re[2]: Спасибо всем, кто ответил.
От: eastmen  
Дата: 20.09.02 12:28
Оценка:
Вопрос решился успешно
с вашей помощью.

Спасибо всем, кто ответил.

С уважением Александр.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.