Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
 Аватар для Reiji Cross
30 / 30 / 4
Регистрация: 14.05.2010
Сообщений: 57

Статические члены класса

30.09.2010, 03:17. Показов 2342. Ответов 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");
Буду благодарен за любую помощь.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.09.2010, 03:17
Ответы с готовыми решениями:

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

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

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

9
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
30.09.2010, 03:21
А если так?
C++
1
Test* Test::p = 0;
И лучше все же пользоваться:
C++
1
p=new Test[count+1];
Вместо:
C
1
realloc(p, (count + 1)*sizeof(Test));
0
 Аватар для Reiji Cross
30 / 30 / 4
Регистрация: 14.05.2010
Сообщений: 57
30.09.2010, 03:25  [ТС]
Извиняюсь за дублирование темы, из-за проблем с браузером дважды отправился запрос на создание темы

Добавлено через 2 минуты
Цитата Сообщение от Lavroff Посмотреть сообщение
А если так?
C++
1
Test* Test::p = 0;
По моему такаязапись ошибочна но сейчас попробую
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
30.09.2010, 03:27
Reiji Cross, Отнюдь. Это NULL Страуструп не рекомендует использовать в C++. А 0 вполне. В С++0x будет специальный null_ptr.
0
 Аватар для Reiji Cross
30 / 30 / 4
Регистрация: 14.05.2010
Сообщений: 57
30.09.2010, 03:33  [ТС]
Да, все-таки появилась ошибка.
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. Проблема осталась та же.
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
30.09.2010, 03:38
Reiji Cross, Да. Выделит новый участок. Но realloc это Си... Хотя. Быть может он вам тут и нужен.

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

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

Может стоит выделить вручную и для них память?
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
30.09.2010, 03:47
Reiji Cross, А вы этого не делаете? Конечно стоит.
1
 Аватар для Reiji Cross
30 / 30 / 4
Регистрация: 14.05.2010
Сообщений: 57
30.09.2010, 03:51  [ТС]
Вместе с тем проблема со статическим указателем на начало списка остается
0
33 / 33 / 2
Регистрация: 24.09.2010
Сообщений: 140
30.09.2010, 12:21
Цитата Сообщение от Reiji Cross Посмотреть сообщение
C++
1
Test *Test::p = NULL;
он отказывается принимать значение NULL, то же самое происходит и в конструкторе
Что значит отказывается? Это верная конструкция, должно быть всё нормально.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.09.2010, 12:21
Помогаю со студенческими работами здесь

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

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

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

класс «Строка» (данные-члены класса – строчка, функции-члены класса – операции)
Помогите пожалйуста с реализацией программы... Реализовать класс «Строка» (данные-члены класса – строчка (указатель на массив, ...

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


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru