Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
9 / 9 / 1
Регистрация: 22.02.2011
Сообщений: 203

Как обраиться к структуре в классе?

07.04.2011, 13:30. Показов 2193. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
как обраиться к структуре в классе.
к указателю и массиву.
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
#include <iostream>
using namespace std;
 
    class cd
{
 
    private:
    char *performers;
    char *label;
    int selections;
    double playtime;
 
    public:
    struct st1
    {
        double * dpoint;
        int mass1[10];
    };
    cd();
    cd(char *s1, char *s2, double x);
    cd(const cd &obj);
    ~cd();
    cd& operator=(const cd &obj);
    friend ostream& operator<<(ostream &os, const cd &obj);
 
    void report()const;
};
 
    class classic : public cd
{
    private:
    char idenf[20];
 
    public:
    classic(char *id, char *s1, char *s2, double x);
    classic(char *id, const cd &cdobj1);
};
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include <iostream>
using namespace std;
 
    cd::cd()
{
    cout << "Default cd constructor\n";
    performers = new char;
    performers[0] = '\0';
    label = new char;
    label[0] = '\0';
    st1.dpoint = new double;
    *st1.dpoint = 0;
    st1.mass1[0] = 0;
    selections = 0;
    playtime = 0;
}
 
    cd::cd(char *s1, char *s2, double x)
{
    cout << "Cd constructor with parameters\n";
    performers = new char [strlen(s1)+1];
    strcpy(performers, s1);
    label = new char[strlen(s2)+1];
    strcpy(label, s2);
    selections = 0;
    playtime = x;
}
    cd::cd(const cd &obj)
{
    cout << "Cd copy constructor\n";
    performers = new char [strlen(obj.performers)+1];
    strcpy(performers, obj.performers);
    label = new char [strlen(obj.label)+1];
    strcpy(label, obj.label);
    selections = obj.selections;
    playtime = obj.playtime;
}
    cd& cd::operator=(const cd &obj)
{
    cout << "Cd operator =\n";
    if(this==&obj)
        return *this;
    delete performers;
    performers = new char [strlen(obj.performers)+1];
    strcpy(performers, obj.performers);
    delete label;
    label = new char [strlen(obj.label)+1];
    strcpy(label, obj.label);
    selections = obj.selections;
    playtime = obj.playtime;
    return *this;
}
    cd::~cd()
{
    cout << "Cd destructor\n";
    delete performers;
    delete label;
}
 
    ostream& operator<<(ostream &os, const cd &obj)
{
    os << "\n";
    return os;
}
    void cd::report()const
{
    cout << performers << "\n";
    cout << label << "\n";
    cout << playtime << "\n";
}
 
    void func1(const cd obj)
{
    obj.report();
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdafx.h>
#include <iostream>
#include "incl.h"
#include "project161.cpp"
 
using namespace std;
 
    int main()
{   cd cdobj2;
    cd cdobj1("Name unknown", "Label unknown", 15.4);
    cdobj1.report();
    cdobj2 = cdobj1;
    cdobj2.report();
    func1(cdobj1);
    return 0;
}
1>c:\documents and settings\er\мои документы\visual studio 2008\projects\project16\project16\projec t161.cpp(11) : error C2143: синтаксическая ошибка: отсутствие ";" перед "."
1>c:\documents and settings\er\мои документы\visual studio 2008\projects\project16\project16\projec t161.cpp(11) : error C2143: синтаксическая ошибка: отсутствие ";" перед "."
1>c:\documents and settings\er\мои документы\visual studio 2008\projects\project16\project16\projec t161.cpp(12) : warning C4832: лексема '.' недопустима после UDT 'cd::st1'
1> c:\documents and settings\er\мои документы\visual studio 2008\projects\project16\project16\incl.h (15): см. объявление 'cd::st1'
1>c:\documents and settings\er\мои документы\visual studio 2008\projects\project16\project16\projec t161.cpp(12) : error C2275: cd::st1: недопустимое использование этого типа в качестве выражения
1>c:\documents and settings\er\мои документы\visual studio 2008\projects\project16\project16\projec t161.cpp(13) : error C2143: синтаксическая ошибка: отсутствие ";" перед "."
1>c:\documents and settings\er\мои документы\visual studio 2008\projects\project16\project16\projec t161.cpp(13) : error C2143: синтаксическая ошибка: отсутствие ";" перед "."
1>Журнал построения был сохранен в "file://c:\Documents and Settings\er\Мои документы\Visual Studio 2008\Projects\project16\project16\Debug\ BuildLog.htm"
1>project16 - ошибок 5, предупреждений 1
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.04.2011, 13:30
Ответы с готовыми решениями:

Модификаторы доступа структура в классе; как ограничить свободный доступ к структуре
class test { private List&lt;liststation&gt; _liststation = new List&lt;liststation&gt;(); public...

Обращение к структуре в классе с выделением памяти
Добрый день уважаемые форумчане. Столкнулся с такой проблемой. Есть класс: class Components { struct comps{ // -- База компонентов ...

Выделение памяти только под часть полей в классе/структуре
Кто знает, возможен ли в C++ такой класс/структура, который может быть или одного вида с одним набором полей (например, double number и...

11
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
07.04.2011, 14:10
C++
1
st1::dpoint
и т.п.

Но вообще не факт. По-моему логичнее в классе создать объект/указатель на эту структуру st и обращаться через него.
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
07.04.2011, 14:30
Цитата Сообщение от ForEveR Посмотреть сообщение
st1::dpoint
Так нельзя.

Чтобы создать объект типа вложенной структуры
C++
1
cd::st1 s1;
В самом классе cd нет объектов типа st1, поэтому обратиться к их полям нельзя.
0
9 / 9 / 1
Регистрация: 22.02.2011
Сообщений: 203
07.04.2011, 16:22  [ТС]
указатель заработал вот так *st1::dpoint = 0;
а вот про массив вот что пишет.
error C2109: для индекса требуется массив или указатель
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
07.04.2011, 16:28
Как, как, КАК, тебе удаётся разыменовывать не существующий указатель???

Добавлено через 2 минуты
Касательно первой ошибки. Ожидаются char*, а передаются const char*
0
9 / 9 / 1
Регистрация: 22.02.2011
Сообщений: 203
07.04.2011, 17:00  [ТС]
получается что класс не может содержать структуры.
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
07.04.2011, 17:17
Может. Но у тебя объявлена структура в пространстве имён класса, но не создан объект типа этой структуры. Раз нет объекта, то нет и адреса.
После определения структуры создай объект, например st1 st; и сможешь к нему обратиться потом:
C++
1
2
cd c;
c.st.dpoint = ...;
1
9 / 9 / 1
Регистрация: 22.02.2011
Сообщений: 203
07.04.2011, 17:52  [ТС]
Получается инициализация структур невозможна. Как же конструкторы и конст рукторы копировщики, operator=.
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
07.04.2011, 19:33
Не путай определение типа и создание экземпляра.
В твоём коде есть только определение типа.
1
9 / 9 / 1
Регистрация: 22.02.2011
Сообщений: 203
07.04.2011, 21:01  [ТС]
как я их иництализирую?
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
08.04.2011, 00:59
korez, Пример.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
template<class T>
class List
{
    struct Node
    {
        Node(T el):elem(el), next(0), prev(0)
        {
        }
        Node* next;
        Node* prev;
        T elem;
     };
public:
   List():head(0), tail(0)
   {
   }
private:
   Node* head;
   Node* tail;
};
1
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
08.04.2011, 05:26
Для начала, было бы неплохо создать объект этого типа. А потом уже инициализирвать.)
В сообщении номер 7 я нарисовал и как создать и как обращаться.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.04.2011, 05:26
Помогаю со студенческими работами здесь

Как обраиться к функции класса через другую функцию класса (друга)?
Пример кода: #include &lt;iostream&gt; using namespace std; class Sasha; class Petya { public: friend class Sasha; ...

Как использовать объект класса, созданого в определеном классе, в другом классе
У меня такой вопрос,как использовать объект класса,созданого в определеном классе,в другом классе.У меня есть объект pl класса Player,это...

Как обьявить переменную в одном классе и что бы ее было видно в дочернем классе
У меня есть основной класс с названием Root один из его членов наследует дочерний класс SubRoot. Скажите как объявить, что бы один из...

Как изменить название кнопки в классе dialog при нажатии на кнопку в классе mainwindow
Добрый день, я около месяца как начал изучать QT, то есть новичок. Собственно дело в следующем, создал новый проект (Приложение -&gt; qt...

Как использовать информацию парсированую в 1 классе в другом классе
имеются 2 класса , объясните плз в чём ошибка using System; using System.Collections.Generic; using System.Linq; using System.Text;...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru