powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Помогите чайнику! Как создать массив классов?
12 сообщений из 12, страница 1 из 1
Помогите чайнику! Как создать массив классов?
    #34522024
Cry wolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как из экземпляров потом функции вытаскивать? Компилятор пишет, что такой объект не является классом: ни (.), ни (->) не помогают.
...
Рейтинг: 0 / 0
Помогите чайнику! Как создать массив классов?
    #34522029
StepLg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
код в студию
в смысле тот, на который компилятор ругается.
...
Рейтинг: 0 / 0
Помогите чайнику! Как создать массив классов?
    #34522038
Cry wolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Определение класса в заголовочном файле:
class TREE_ELEMENT {
public:
TREE_ELEMENT ();
void setAll( int, int, int, int, int);
..........

int number;
int isa;
int isat;
int partof;
int partoft;

};

Инициализация:

TREE_ELEMENT::TREE_ELEMENT
{}
void TREE_ELEMENT::setAll(int Wnumber = 0, int Wisa = 0, int Wpartof = 0, int Wisat = 0, int Wpartoft =0)
{
this.number = Wnumber;
this.isa = Wisa;
this.isat = Wisat;
this.partof = Wpartof;
this.partoft = Wpartoft;
}

Создание экземпляра:
te[temp_name] = new TREE_ELEMENT();
te[temp_name].setAll(temp_name, isa_name, pof_name, isat_name, poft_name);

Все переменые int

Ошибки:

C:\Program Files\Microsoft Visual Studio\MyProjects\result\filewr.cpp(141) : error C2679: binary '=' : no operator defined which takes a right-hand operand of type 'class TREE_ELEMENT *' (or there is no acceptable conversion)
tree.cpp
C:\Program Files\Microsoft Visual Studio\MyProjects\result\tree.cpp(10) : fatal error C1001: INTERNAL COMPILER ERROR
(compiler file 'msc1.cpp', line 1786)
Please choose the Technical Support command on the Visual C++
Help menu, or open the Technical Support help file for more information
Error executing cl.exe.
...
Рейтинг: 0 / 0
Помогите чайнику! Как создать массив классов?
    #34522181
TopSpace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
te[temp_name] = new TREE_ELEMENT();
te[temp_name].setAll(temp_name, isa_name, pof_name, isat_name, poft_name);
- а тут можно подробнее? Как задана переменная te?
...
Рейтинг: 0 / 0
Помогите чайнику! Как создать массив классов?
    #34522368
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cry wolf
Создание экземпляра:
te[temp_name] = new TREE_ELEMENT();
te[temp_name].setAll(temp_name, isa_name, pof_name, isat_name, poft_name);

Все переменые int

Ошибки:

C:\Program Files\Microsoft Visual Studio\MyProjects\result\filewr.cpp(141) : error C2679: binary '=' : no operator defined which takes a right-hand operand of type 'class TREE_ELEMENT *' (or there is no acceptable conversion)
tree.cpp
C:\Program Files\Microsoft Visual Studio\MyProjects\result\tree.cpp(10) : fatal error C1001: INTERNAL COMPILER ERROR
(compiler file 'msc1.cpp', line 1786)
Please choose the Technical Support command on the Visual C++
Help menu, or open the Technical Support help file for more information
Error executing cl.exe.

Объяви

Код: plaintext
1.
TREE_ELEMENT* te[n];
...
Рейтинг: 0 / 0
Помогите чайнику! Как создать массив классов?
    #34522374
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или делая также, но убер new
...
Рейтинг: 0 / 0
Помогите чайнику! Как создать массив классов?
    #34522555
grieg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во-первых, класс - это тип. В С++ нельзя иметь массив классов. Можно иметь массив объектов данного класса.

Во-вторых, следует различать сам объект и указатель на него. Ты никак объявляешь массив объектов. Что-то типа
Код: plaintext
1.
TREE_ELEMENT te[ 10 ];
И продуешь какому-то элементу этого массива, то есть какому-то объекту класса TREE_ELEMENT присвоить указатель (то есть адрес) на другой, только что созданный объект.
Код: plaintext
1.
new TREE_ELEMENT();
Тебе компилятор так и говорит: не могу, говорит, выполнить присваивание.

Если пока можешь, используй массив объектов, а не массив указателей, ибо это проще.

Далее, оформляй код в форуме тегом SRC, ибо читать неудобно.

Как только заработает, сделай из функции
Код: plaintext
1.
void setAll
конструктор. Ибо это по сути и есть конструктор.

Код: plaintext
1.
 fatal error C1001: INTERNAL COMPILER ERROR
Это круто! Мб Биллу Гейтсу написать, что нашел ошибку в компиляторе :)
...
Рейтинг: 0 / 0
Помогите чайнику! Как создать массив классов?
    #34522591
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cry wolf пишет:
> Как из экземпляров потом функции вытаскивать? Компилятор пишет, что
> такой объект не является классом: ни (.), ни (->) не помогают.

Вообще, вроде бы массив классов можно создать только если они POD-structure.
Не путаю ?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Помогите чайнику! Как создать массив классов?
    #34522698
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
Cry wolf пишет:
> Как из экземпляров потом функции вытаскивать? Компилятор пишет, что
> такой объект не является классом: ни (.), ни (->) не помогают.

Вообще, вроде бы массив классов можно создать только если они POD-structure.
Не путаю ?
Posted via ActualForum NNTP Server 1.4

Да, нет. Это никак не связано.
...
Рейтинг: 0 / 0
Помогите чайнику! Как создать массив классов?
    #34523089
MasterZiv:
Вообще, вроде бы массив классов можно создать только если они POD-structure.
Не путаю ?


да не, лишь бы конструктор по умолчанию был доступен
условие POD нужно для инциализации агрегатом
...
Рейтинг: 0 / 0
Помогите чайнику! Как создать массив классов?
    #34524471
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Голенков ВладимирMasterZiv:
Вообще, вроде бы массив классов можно создать только если они POD-structure.
Не путаю ?


да не, лишь бы конструктор по умолчанию был доступен
условие POD нужно для инциализации агрегатом

И даже это необязательно (в смысле, конструктора по умолчанию может и не быть), если использовать для инициализации массива агрегатную инициализацию, в которой можно использовать любой доступный конструктор:

Код: plaintext
1.
2.
3.
4.
5.
6.
class foo {public: explicit foo(const char *) {...} ...};

int main()
{
     foo arr[] = {foo("1"), foo("2"), foo("3")};
    ....
}
...
Рейтинг: 0 / 0
Помогите чайнику! Как создать массив классов?
    #34524522
Анатолий Широков: И даже это необязательно (в смысле, конструктора по умолчанию может и не быть), если использовать для инициализации массива агрегатную инициализацию, в которой можно использовать любой доступный конструктор

ага, вполне работает, только требует доступного конструктора копирования
правда в результате оптимизации его все равно не использует (g++ (GCC) 3.2.3)
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Помогите чайнику! Как создать массив классов?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]