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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.82
InferernumDeus
7 / 7 / 1
Регистрация: 13.08.2012
Сообщений: 250
#1

Создание динамического массива объектов - C++

14.11.2012, 14:55. Просмотров 2946. Ответов 18
Метки нет (Все метки)

Выполняю лабораторную работу в Visual Studio 2012.
Вероятно, учебник, как и лабы, устарел.

Идёт пункт в лабе:
В файле group.h определите с помощью ключевого слова class объект Group.
Данные объекта:
размер массива (целый тип)
указатель на массив (тип Person* )

Записываю:
C++
1
2
int size;
person* pgroup[];
Получаю ошибку с указанием на вторую строку:

"Идентификатор "person" не определён".

Что звучит вполне логично, поскольку данный класс был объявлен, но только в другом .h файле.
Каким образом их можно связать?
Ни в учебнике, ни в тексте лабораторной ничего об этом не сказано.

Кроме того, возникли проблемы при объявлении конструктора этого класса в файле group.cpp.
Впрочем, здесь компилятор объяснит лучше меня.
Прикладываю исходники в архиве.
0
Вложения
Тип файла: rar LAB2.rar (1.46 Мб, 24 просмотров)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.11.2012, 14:55
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Создание динамического массива объектов (C++):

Добавления и удаление объектов из динамического массива - C++
Есть динамический массив объектов класса. Как реализовать возможность добавления или удаления объектов из массива.

Изменение размера динамического массива объектов класса - C++
Всех приветствую! Нужно изменить размер динамического массива, в котором я храню созданные объекты. Делаю это так: Car *spis_temp =...

Создание динамического массива - C++
Ребята подскажите пожалуйста не давно начал изучать С++ ,решил добавить еще один язык для себя помимо Delphi, и вот вопрос как объявить...

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

Создание динамического массива - C++
Как объявить вот так вот : int blocks = { {0,0,0,0,0,0}, {0,0,0,0,0,0}, {0,0,0,0,0,0}}; Мне пишет ошибку : массив не может...

Создание динамического массива - C++
Добрый день! Хочу выделить память под массив, только после того как буду знать его длину. Длину вычисляю в функции. Память под массив...

18
denys_l
52 / 52 / 4
Регистрация: 26.09.2011
Сообщений: 186
14.11.2012, 15:13 #2
Оператор индексирования указывать не надо
C++
1
person* pgroup;
связать два фала можно подключив его
C++
1
#include "*.h"
Добавлено через 7 минут
А вообще, в коде очень много синтаксических ошибок
1
InferernumDeus
7 / 7 / 1
Регистрация: 13.08.2012
Сообщений: 250
15.11.2012, 08:06  [ТС] #3
Спасибо, исправил часть ошибок.
Теперь ругается:
error C2533: Group::{ctor}: конструкторы не разрешены для возвращаемого типа,

при описании конструктора.

Довольно неприятно переходить с php на c++, но ради таких-то возможностей оптимизации стоит потерпеть.
0
Croessmah
Эксперт CЭксперт С++
13514 / 7672 / 866
Регистрация: 27.09.2012
Сообщений: 18,888
Записей в блоге: 3
Завершенные тесты: 1
15.11.2012, 08:22 #4
Цитата Сообщение от InferernumDeus Посмотреть сообщение
error C2533: Group::{ctor}: конструкторы не разрешены для возвращаемого типа,
где ругается?
0
ValeryS
Модератор
6679 / 5088 / 475
Регистрация: 14.02.2011
Сообщений: 17,081
15.11.2012, 08:28 #5
Цитата Сообщение от InferernumDeus Посмотреть сообщение
C2533: Group::{ctor}: конструкторы не разрешены для возвращаемого типа,
ты наверно вот так пишешь
C++
1
2
class Group{
 void/*(int....double)*/ Group()
но конструктор не возвращает значений даже void
посему надо писать так
C++
1
2
class Group{
  Group()
1
Croessmah
Эксперт CЭксперт С++
13514 / 7672 / 866
Регистрация: 27.09.2012
Сообщений: 18,888
Записей в блоге: 3
Завершенные тесты: 1
15.11.2012, 08:30 #6
эта ошибка значит, что у Вас где-то есть конструктор, который имеет возвращаемый тип. У конструктора его быть не должна (даже void'a)
0
InferernumDeus
7 / 7 / 1
Регистрация: 13.08.2012
Сообщений: 250
15.11.2012, 10:06  [ТС] #7
C++
1
2
public:
    Group(int s);
C++
1
2
3
4
5
Group::Group(int s) //определение конструктора
{
    Group::size = s;
    Group::pgroup = new Person[Group::size];
}
И всё.
Очень странно.
0
InferernumDeus
7 / 7 / 1
Регистрация: 13.08.2012
Сообщений: 250
15.11.2012, 10:19  [ТС] #8
Всё оказалось проще.
Я забыл очистить решение.

Но теперь получил при компиляции две другие непонятные ошибки.
Прикладываю исходники.
0
Вложения
Тип файла: rar LAB2.rar (1.47 Мб, 30 просмотров)
Croessmah
Эксперт CЭксперт С++
13514 / 7672 / 866
Регистрация: 27.09.2012
Сообщений: 18,888
Записей в блоге: 3
Завершенные тесты: 1
15.11.2012, 10:24 #9
У Вас 2 функции main. Одна в person.cpp, другая в group.cpp
1
ValeryS
Модератор
6679 / 5088 / 475
Регистрация: 14.02.2011
Сообщений: 17,081
15.11.2012, 10:29 #10
Цитата Сообщение от InferernumDeus Посмотреть сообщение
Group::Group(int s) //определение конструктора
{
Group::size = s;
Group:: pgroup = new Person[Group::size];
}
вот здесь ты обращаешься к членам класса ( а не объекта) а класса как такого не существует, это описание
это все равно, что
C++
1
int=5;
тебе нужно обратится членам объекта класса
C++
1
2
3
4
5
 
{
this->size = s;
this->pgroup = new Person[this->size];
}
this это указатель на текущий объект класса, сам на себя
самому на себя ссылаться глупо, объект и так знает про себя все
посему нормально писать так
C++
1
2
3
4
5
 
{
 size = s;
 pgroup = new Person[size];
}
1
InferernumDeus
7 / 7 / 1
Регистрация: 13.08.2012
Сообщений: 250
15.11.2012, 10:40  [ТС] #11
Цитата Сообщение от Croessmah Посмотреть сообщение
У Вас 2 функции main. Одна в person.cpp, другая в group.cpp
Ура! Таки скомпилировалось.
Довольно странная ошибка.
Цитата Сообщение от ValeryS Посмотреть сообщение
посему нормально писать так
C++
1
2
3
4
5
 
{
 size = s;
 pgroup = new Person[size];
}
До чего же у нас смятый учебник.
Придётся полистать Хортона.
Большое спасибо.
0
InferernumDeus
7 / 7 / 1
Регистрация: 13.08.2012
Сообщений: 250
10.12.2012, 08:13  [ТС] #12
Помогите.
Я в полном недоумении от всего этого безобразия с типами.
0
Вложения
Тип файла: rar LAB2.rar (1.84 Мб, 24 просмотров)
ValeryS
Модератор
6679 / 5088 / 475
Регистрация: 14.02.2011
Сообщений: 17,081
10.12.2012, 09:20 #13
//заранее объявляю переменные-счётчики
int i, j;
double ctr;
не надо заранее объявлять, надо где используются
вот у тебя
C++
1
2
3
4
5
6
7
void Group::Print() //метод для вывода содержимого каждого элемента массива
{
    for (i = 0; i < gsize; i++)
    {
        GetPerson(i).Print();   //метод Group::GetPerson возвращает элемент 
    }                           //матрицы (экземпляр person) к кторому 
}
сделай так
C++
1
2
3
4
5
6
7
void Group::Print() //метод для вывода содержимого каждого элемента массива
{
    for (int i = 0; i < gsize; i++)
    {
        GetPerson(i).Print();   //метод Group::GetPerson возвращает элемент 
    }                           //матрицы (экземпляр person) к кторому 
}
с глобальными переменными можно получить большие неприятности
1
InferernumDeus
7 / 7 / 1
Регистрация: 13.08.2012
Сообщений: 250
10.12.2012, 10:32  [ТС] #14
Большое спасибо, впредь буду оъявлять правильно.
Осталось разобраться, почему описанное в цикле создание объектов не ассоциируется с нужным конструктором.
Причём, не смотря на ошибку, программа выполняется и выводит содержимое этих объектов.
0
InferernumDeus
7 / 7 / 1
Регистрация: 13.08.2012
Сообщений: 250
10.12.2012, 13:19  [ТС] #15
Не подумал.
Напишу так.
Кликните здесь для просмотра всего текста

.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Person
{
    int p_num;
    char name[40];
    bool sex;
    double age;
 
    public: 
    Person(int n, char f[], bool s, double a);
    Person();
}; 
 
class Group
{
    //переменные класса
    int gsize;
    Person *pgroup;
    
    public:
    Group(int s);
    int Group::Size();
    void PutPerson(int i, Person& man);
}
.cpp
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
Group::Group(int s) //определение конструктора
{
    gsize = s;
    pgroup = new Person[gsize];
}
 
int Group::Size() //метод для определения размера массива
{
    return gsize;
}
 
void Group::PutPerson(int i, Person& man) //метод для занесения объекта Person
{                                         //в i-й элемент массива
    pgroup[i] = man;
}
 
int main()
{
    char names[5][25] = {"A", "B", "C", "D", "E"};
    Group group(5);
    
    for (int i = 0; i < group.Size(); i++)
    {
        group.PutPerson (i, Person (i, names[i][0], false, double(i * 10)));
    }
}

Вроде бы, всё необходимое скопировал.
0
10.12.2012, 13:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.12.2012, 13:19
Привет! Вот еще темы с ответами:

Создание динамического массива - C++
Хотел написать программу, чтобы пользователь мог задать количество элементов в одномерном массиве, но компилятор пишет что количество...

Создание динамического массива - C++
объясните пожалуйста вот эту часть // sozdanie dinamicheskogo massiva m*n a=(int**)malloc(m*sizeof(int *)); for(i=0;i&lt;m;i++) { ...

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

Создание динамического массива - C++
const int Num=5; const int SIZE=4096 * Num; SHORT Buf; как такое заменить, если Num- инициализируется при загрузке программы,...


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

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

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