Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
pihta
1 / 1 / 0
Регистрация: 11.11.2012
Сообщений: 23
#1

Инициализация static члена класса - C++

03.05.2014, 20:59. Просмотров 369. Ответов 1
Метки нет (Все метки)

Добрый вечер! Есть класс, в нём в private реализован ещё один + это всё шаблоны. Во вложенном классе есть static указатель на переменную типа этого вложенного класса. Вопрос - как инициализировать эту переменную и возможно ли это? Если нет или если есть вариант по проще, как сделать nilPtr, что бы на неё в моём дереве указывали все листья, то буду очень благодарен решению.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
enum colors {black = false, red = true};
 
template< typename T>
class RBTree
{
    public:
        RBTree();
        ~RBTree();
 
        RBTree<T>& insert(const T&);
        void view() const;
 
    private:
        template< typename T> class Node;
 
        Node<T> *rootPtr;
 
        template< typename T> class Node
        {
            friend class RBTree;
            static Node<T> *nilPtr; // как для вот этого вызвать... 
 
            public:
                Node()              // ...вот этот конструктор?
                {
                    parentPtr = leftPtr = rightPtr = this;
                    key = 0;
                    color = black;
                };
 
                Node(const T &value, colors clr)
                {
                    parentPtr = leftPtr = rightPtr = nilPtr;
                    key = value;
                    color = clr;
                };
 
            private:
                T key;
                colors color;
                Node<T> *parentPtr;
                Node<T> *leftPtr;
                Node<T> *rightPtr;
        };
 
        void leftRotate(Node<T>*);
        void rightRotate(Node<T>*);
        void insertFixup(Node<T>*);
        void viewHelper(Node<T>*, int) const;
};
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.05.2014, 20:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Инициализация static члена класса (C++):

Инициализация переменной члена класса - C++
Добрый день. Не могу никак понять, что делаю неверно при использовании переменной класса. Не понимаю как переменную необходимо...

Инициализация константы-члена класса - C++
Все привет! Возникла такая проблема: есть double константа-член класса, объявленная в секции protected. Проблема в том, что я не знаю как...

Что значит static для переменной-члена класса? - C++
class A{ static int x; }; Что значит static для переменной-члена класса?

Инициализация статического члена из шаблонного класса - C++
Добрый день. Есть код: template&lt;int test&gt; class Test { template&lt;int a&gt; struct Inner { static bool...

Инициализация константного статического объекта - члена класса - C++
Здравствуйте, у меня возникла проблема с инициализацией статического объекта, который является членом класса. Этот объект должен быть...

Инициализация константного члена класса с проверкой значения - C++
Допустим есть класс константным членом class a{ const int i; public: a(int ii):i(ii){}; } Можно ли как-нибудь...

1
DrOffset
7376 / 4453 / 1009
Регистрация: 30.01.2014
Сообщений: 7,304
03.05.2014, 21:12 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
pihta, один уточняющий вопрос. T из внешнего класса равно T из внутреннего или это разные T?
В любом случае этот код содержит ошибку. Если это один и тот же T, то смысл делать шаблонным внутренний класс Node отпадает. Если это разные T, то они должны иметь разные имена. И да, если компилятор из VS и он это собирает, то это только потому, что там не реализован two phase lookup.
Склоняясь к тому, что это один и тот же T, вот решение:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
template< typename T>
class RBTree
{
public:
    RBTree();
    ~RBTree();
 
    RBTree<T>& insert(const T&);
    void view() const;
 
private:
    class Node;
 
    Node *rootPtr;
 
    class Node
    {
        friend class RBTree;
        static Node * nilPtr; // как для вот этого вызвать...
 
    public:
        Node()              // ...вот этот конструктор?
        {
            parentPtr = leftPtr = rightPtr = this;
            key = 0;
            color = black;
        };
 
        Node(const T &value, colors clr)
        {
            parentPtr = leftPtr = rightPtr = nilPtr;
            key = value;
            color = clr;
        };
 
    private:
        T key;
        colors color;
        Node *parentPtr;
        Node *leftPtr;
        Node *rightPtr;
    };
 
    void leftRotate(Node *);
    void rightRotate(Node *);
    void insertFixup(Node *);
    void viewHelper(Node *, int) const;
};
 
// в hpp
template< typename T>
typename RBTree<T>::Node * RBTree<T>::Node::nilPtr = 0;
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.05.2014, 21:12
Привет! Вот еще темы с ответами:

Инициализация в объявлении константных статических (const static) членов-данных класса. - C++
Привет. Подскажите пожалуйста почему нельзя создавать в классе const static float, а const static int можно? class A{ const...

инициализация static данных - C++
как мне проинициализировать float в private ??? class Fuller:public HeavyCar { const static int volume = 2; const static float...

Инициализация static переменной - C++
Задание опять же таки из книги Страуструпа: Определите два класса, каждый со статическим членом, так, чтобы конструирование статического...

Инициализация static map - C++
Есть модуль, отвечающий за выдачу Сообщения ошибки по коду ошибки. Пока использую просто в тупую статический map прям в коде. Потом...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru