Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.75
Reiji Cross
26 / 26 / 1
Регистрация: 14.05.2010
Сообщений: 57
#1

Статические члены класса - C++

30.09.2010, 03:17. Просмотров 1588. Ответов 9
Метки нет (Все метки)

Доброго времени суток.
Задача состоит в том, чтобы создать список обыектов класса Test, с возможностью последующего добавления элементов и расширения списка. Память под список долна добавляться в конструкторе. Указктель p должен быть статическим и в каждом объекте класса должен быть равным указателю на начало списка, т. е. на первый элемент, но уже в объявлении
C++
1
Test *Test::p = NULL;
он отказывается принимать значение NULL, то же самое происходит и в конструкторе
C++
1
p = this;
значение не присваивается, а остаеттся прежним, и указывает на какой-то левый адрес

Вот описание класса Test
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
class Test {
protected:
    char *name;
    char *type;
    static int count;
    static Test *p;
public:
    int GetCount(){return count;};
    Test(char *s, char *t);
    Test(){};
    char *Show();
};
 
int Test::count = 0;
Test *Test::p = NULL;
 
Test::Test(char *s, char *t){
    count++;
    if((count - 1) == 0) {
        p = this;
    } else {
        realloc(p, (count + 1)*sizeof(Test));
    }
    strcpy(name, s);    
    strcpy(type, t);
}
 
char *Test::Show(){
    char *str;
    for(int i = 0; i < count; i++){
        strcat(str, name);
        strcat(str, "\n");
    }
    return str;
}
Первый элемент списка объявляю так

C++
1
 Test *spis = new Test(nstring, "Test");
Буду благодарен за любую помощь.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.09.2010, 03:17     Статические члены класса
Посмотрите здесь:

Статические члены класса - C++
Добрый день. Проходили тему - статические члены класса. Написали программу, вылезает ошибка, помогите побороть пожалуйста. #include...

Статические массивы, члены класса - C++
необходимо создать статический массив. компилятор gcc #include&lt;iostream&gt; class c{ public: static const char x = &quot;qwe&quot;; ...

Как инициализировать статические члены класса - C++
Помогите пожалуйста....я не знаю как вывести в статическое поле значения((( #include &lt;conio.h&gt; #include &lt;stdlib.h&gt; #include...

Класс MyString через статические члены класса - C++
Всем доброго времени суток. Возникла необходимость решить задачу, хочу обратиться к знающим людям за подходящим к данной задаче...

Конструктор класса, содержащего только статические члены - C++
Практикуюсь по книге Стенли Липпмана &quot;Язык программирования C++ вводный курс&quot; 4 изд. Осваиваю главу 12.6 Статические члены класса. В...

Как правильно инициализировать статические члены класса? - C++
Я новичок и заранее прошу прощение за тупые вопросы. Имеются два класса: Solution и Pool. Pool состоит из нескольких обьектов класса...

Статические члены - C++
Мне необходимо создать класс А, причем: этот класс всегда нужен в единственном экземпляре, через этот класс работают классы В и С (т.е. в...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
30.09.2010, 03:21     Статические члены класса #2
А если так?
C++
1
Test* Test::p = 0;
И лучше все же пользоваться:
C++
1
p=new Test[count+1];
Вместо:
C
1
realloc(p, (count + 1)*sizeof(Test));
Reiji Cross
26 / 26 / 1
Регистрация: 14.05.2010
Сообщений: 57
30.09.2010, 03:25  [ТС]     Статические члены класса #3
Извиняюсь за дублирование темы, из-за проблем с браузером дважды отправился запрос на создание темы

Добавлено через 2 минуты
Цитата Сообщение от Lavroff Посмотреть сообщение
А если так?
C++
1
Test* Test::p = 0;
По моему такаязапись ошибочна но сейчас попробую
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
30.09.2010, 03:27     Статические члены класса #4
Reiji Cross, Отнюдь. Это NULL Страуструп не рекомендует использовать в C++. А 0 вполне. В С++0x будет специальный null_ptr.
Reiji Cross
26 / 26 / 1
Регистрация: 14.05.2010
Сообщений: 57
30.09.2010, 03:33  [ТС]     Статические члены класса #5
Да, все-таки появилась ошибка.
error C2039: 'p' : is not a member of '`global namespace'' c:\users\kross\documents\visual studio 2010\projects\oop_lab2_v5_kross\oop_lab2_v5_kross\Form1.h

Цитата Сообщение от Lavroff Посмотреть сообщение
p=new Test[count+1];
Если так выделять память, то это ведь не расширит память для имеющегося списка, а выделит новый участок который будет вмещать на 1 элемент больше чем предыдущий. Тогда придется копировать весь прошлый список в на этот участок памяти и добавлять новый элемент? Если я не прав, поправьте меня...

Добавлено через 1 минуту
Вижу вы отредактировали свой спервый пост, меня смутила там звездочка на новом месте а не 0

Добавлено через 2 минуты
Исправил NULL на 0. Проблема осталась та же.
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
30.09.2010, 03:38     Статические члены класса #6
Reiji Cross, Да. Выделит новый участок. Но realloc это Си... Хотя. Быть может он вам тут и нужен.

То есть все равно указывает вникуда?
Reiji Cross
26 / 26 / 1
Регистрация: 14.05.2010
Сообщений: 57
30.09.2010, 03:45  [ТС]     Статические члены класса #7
Цитата Сообщение от Lavroff Посмотреть сообщение
Reiji Cross, Да. Выделит новый участок. Но realloc это Си... Хотя. Быть может он вам тут и нужен.

То есть все равно указывает вникуда?
Да, именно "вникуда". Вот уже час бьюсь именно с это проблемой. И заметил еще кое что, почемуто указатели на эти поля объектов
C++
1
2
    char *name;
    char *type;
всегда указывают на непонятный адрес
name 0xcdcdcdcd <Bad Ptr> char *
type 0xcdcdcdcd <Bad Ptr> char *

Может стоит выделить вручную и для них память?
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
30.09.2010, 03:47     Статические члены класса #8
Reiji Cross, А вы этого не делаете? Конечно стоит.
Reiji Cross
26 / 26 / 1
Регистрация: 14.05.2010
Сообщений: 57
30.09.2010, 03:51  [ТС]     Статические члены класса #9
Вместе с тем проблема со статическим указателем на начало списка остается
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.09.2010, 12:21     Статические члены класса
Еще ссылки по теме:

Зависимости и статические члены - C++
По ходу дела, у меня возникла следующая проблема. Допустим, что у нас есть два класса. Один класс затребует второй. Второй класс...

Статические члены и функции - C++
Что-то я не могу понять что я забыли и чяднт что код не компилируется. #include &lt;iostream&gt; #include &lt;string&gt; using namespace std; ...

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

Статические функции-члены - хорошо или плохо? - C++
Всем привет. Приведу пример такой архитектуры. Есть базовый интерфейс. От него наследуются много конкретных. И есть фабрика,...

Статические поля класса - C++
Не подскажете как инициализировать статический массив? Но чтобы я сам мог ввести этот массив.


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

Или воспользуйтесь поиском по форуму:
Nwq
33 / 33 / 2
Регистрация: 24.09.2010
Сообщений: 140
30.09.2010, 12:21     Статические члены класса #10
Цитата Сообщение от Reiji Cross Посмотреть сообщение
C++
1
Test *Test::p = NULL;
он отказывается принимать значение NULL, то же самое происходит и в конструкторе
Что значит отказывается? Это верная конструкция, должно быть всё нормально.
Yandex
Объявления
30.09.2010, 12:21     Статические члены класса
Ответ Создать тему
Опции темы

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