Другие языки программирования и технологии

Проблема с инициализацией массива объектов.

Собственно описан класс: class Client{public:int x, y; ...};В основной пишу: Client M[5];...for (int i=0; i<5; ++i){ M=new Client();};Ругается вот так: error C2679: binary '=' : no operator found which takes a right-hand operand of type 'Client *' (or there is no acceptable conversion)Не пойму в чем в проблема( Не подскажите, как будет правильно? Нужен массив объектов типа Client.
Илья @@@@@
Илья @@@@@
376
Ошибка первая (на которую ругается компилятор) - вы пытаетесь присвоить переменной типа "массив" указатель на созданный класс. Ошибка вторая - вы декларировали переменную типа "массив классов" а не переменную "массив указателей на классы" - тоесть даже если вы замените M=new Client() на M[индекс] =new Client() - компилятор все равно будет ругаться. Тоесть при объявлении Client M[5] - вы уже имеете массив из пяти проинициализированных классов типа Client и вызывать оператор new нет никакой необходимости. Если же вам он в любом случае нужен - тогда декларация должна иметь вид Client *M[5];

2 sysadmin: Насмешил, парень. В C++ НЕНОРМАЛЬНО реализован ООП. На чем по твоему собственно писались интерпретаторы шарпа и жабы? На .NET что-ли?
Вячеслав Иванюгин
Вячеслав Иванюгин
1 281
Лучший ответ
>> В основной пишу:
>> Client M[5];

Пиши Client *M[5]; // массив указателей.
Ну дык понятно, индекс вы завели а использовать его не судьба? Я вот тоже не знаю как массиву присвоить значение объекта.
Судя по закорючкам пишешь на C++, так вот в строке M[5] создаётся массив - и он уже готов к работе. Оператор new пытается выделить память, которая 1) уже и так выделена, 2)слева должен быть указатель, т. е. Client*, 3) и т. д.
Оператор new создаёт новый объект лишь в НОРМАЛЬНО РЕАЛИЗУЮЩИХ ООП языках вроде C# или Java, или др.
(я не говорю, что С++ плох, я говорю, что ООП в нём кривое)
И вообще M объявлена как массив, а пытаешься использовать как обычную переменную (для массива - М [индекс] ).
Итог: убери этот for с инициализацией вообще и пользуйся - уже всё создано.
DR
Dior Razakov
2 190