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

Инициализация класса A внутри класса B - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.63
4ort
0 / 0 / 0
Регистрация: 23.03.2012
Сообщений: 6
23.03.2012, 15:29     Инициализация класса A внутри класса B #1
заранее извиняюсь, наверняка подобное было на одной из 1000 страниц=)...
есть 2 класса

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
//собственно первый класс
class matrix        
{
private:
    //сама матрица и справочная информация для вычислений - количество строк и столбцов
    unsigned int rows, columns;
    double *M;
public:
    matrix (unsigned int row, unsigned int col)
    {
        rows=row;
        columns=col;
        M=new double [rows*columns];
        for (int i=0;i<rows*columns;i++)
            M[i]=0;
    }
    matrix (unsigned int row)
    {
        rows=row;
        columns=1;
        M=new double [rows*columns];
        for (int i=0;i<rows*columns;i++)
            M[i]=0;
    }
    
    ~matrix()
    {
        delete []M;
    }
 
//дальше различные функции по работе с матрицей
};
 
//и второй класс
class block2d   //упрощенная реализация работы двумерного блока
{
private:
    matrix wtf (3,4);   //в редакторе подчеркивает цифры 3 и 4: "error: требуется спецификатор типа"
public:
 
};
при компиляции пишет "error C2059: синтаксическая ошибка: константа", ругается на эту же строку.
если я правильно понял, ему не нравится само явление инициализации при объявлении
что делать не знаю, но matrix "почти обязательно" должен являться объектом класса block2d и храниться внутри него

почитал в книжках про наследование и дружественные классы в надежде хоть как то привязать matrix к block2d, но на данный момент успехов тоже нету
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NightCoder89
 Аватар для NightCoder89
12 / 12 / 1
Регистрация: 22.03.2012
Сообщений: 42
23.03.2012, 15:40     Инициализация класса A внутри класса B #2
39 строчка некорректна, достаточно просто объявить указатель на класс matrix *р вместо matrix wtf (3,4), а потом внутри класса block2d проводить с ним манипуляции.
4ort
0 / 0 / 0
Регистрация: 23.03.2012
Сообщений: 6
23.03.2012, 15:55  [ТС]     Инициализация класса A внутри класса B #3
указатель я создавал, и все с ним работало, однако, в этом случае приходится отдельно создавать matrix переменную, а после этого связывать ее с данным указателем, что не совсем удобно на мой взгляд (тк в результате может быть создано неограниченное количество переменных типа block2d, и хотелось бы избежать выполнения этих операций)
да и целью является чтобы matrix лежал внутри block2d, другими словами, чтобы создавая block2d получать и matrix сразу готовеньким
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
722 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
23.03.2012, 15:57     Инициализация класса A внутри класса B #4
Цитата Сообщение от 4ort Посмотреть сообщение
отдельно создавать matrix переменную
какую отдельную?
NightCoder89
 Аватар для NightCoder89
12 / 12 / 1
Регистрация: 22.03.2012
Сообщений: 42
23.03.2012, 15:59     Инициализация класса A внутри класса B #5
вызвать из конст. block2d баз. конст. matrix
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
722 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
23.03.2012, 16:05     Инициализация класса A внутри класса B #6
что значит унаследовать? конструкторы не наследуются, можно вызвать из конструктора-предка родительский

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class block2d   //упрощенная реализация работы двумерного блока
{
private:
        matrix* wtf;   //в редакторе подчеркивает цифры 3 и 4: "error: требуется спецификатор типа"
 
public:
 
    block2d(int f, int s)
        :wtf(new matrix(f, s))
    {
        //
    }
 
};
4ort
0 / 0 / 0
Регистрация: 23.03.2012
Сообщений: 6
23.03.2012, 16:27  [ТС]     Инициализация класса A внутри класса B #7
Цитата Сообщение от PointsEqual Посмотреть сообщение
block2d(int f, int s)
* * * * :wtf(new matrix(f, s))
спасибо, как раз то что и требовалось!

Цитата Сообщение от PointsEqual Посмотреть сообщение
какую отдельную?
когда говорил отдельную, то в main сначала создавал matrix переменную, в конструкторе block2d входным параметром указывал адрес matrix-переменной, и уже так пытался работать. теперь понял что тупил.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.03.2012, 16:37     Инициализация класса A внутри класса B
Еще ссылки по теме:

C++ Инициализация объектов класса
C++ Методы класса внутри определения класса
C++ Видимость экземпляра класса внутри класса

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

Или воспользуйтесь поиском по форуму:
villu
202 / 202 / 4
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
23.03.2012, 16:37     Инициализация класса A внутри класса B #8
без new/delete
C++
1
2
3
4
5
6
7
8
9
//и второй класс
class block2d 
{
    matrix wtf;  
public:
    block2d()
        :wtf(3, 4)
    {}
};
Yandex
Объявления
23.03.2012, 16:37     Инициализация класса A внутри класса B
Ответ Создать тему
Опции темы

Текущее время: 04:49. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru