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

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

30.09.2010, 03:17. Показов 2331. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs . . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru