Есть слдующий класс, использующий в качестве
поля объект шаблооного класса
#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 вне класса, то все проходит.
Разве в определении класса нельзя использовать
объекты параметризованных классов ?
С уважением Александр.
Здравствуйте 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>Разве в определении класса нельзя использовать объекты параметризованных классов ?
Определять можно, нельзя их инициализировать.
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Здравствуйте 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 >>