Другие языки программирования и технологии
Проблема с инициализацией массива объектов.
Собственно описан класс: 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.
Ошибка первая (на которую ругается компилятор) - вы пытаетесь присвоить переменной типа "массив" указатель на созданный класс. Ошибка вторая - вы декларировали переменную типа "массив классов" а не переменную "массив указателей на классы" - тоесть даже если вы замените M=new Client() на M[индекс] =new Client() - компилятор все равно будет ругаться. Тоесть при объявлении Client M[5] - вы уже имеете массив из пяти проинициализированных классов типа Client и вызывать оператор new нет никакой необходимости. Если же вам он в любом случае нужен - тогда декларация должна иметь вид Client *M[5];
2 sysadmin: Насмешил, парень. В C++ НЕНОРМАЛЬНО реализован ООП. На чем по твоему собственно писались интерпретаторы шарпа и жабы? На .NET что-ли?
2 sysadmin: Насмешил, парень. В C++ НЕНОРМАЛЬНО реализован ООП. На чем по твоему собственно писались интерпретаторы шарпа и жабы? На .NET что-ли?
>> В основной пишу:
>> Client M[5];
Пиши Client *M[5]; // массив указателей.
>> Client M[5];
Пиши Client *M[5]; // массив указателей.
Ну дык понятно, индекс вы завели а использовать его не судьба? Я вот тоже не знаю как массиву присвоить значение объекта.
Судя по закорючкам пишешь на C++, так вот в строке M[5] создаётся массив - и он уже готов к работе. Оператор new пытается выделить память, которая 1) уже и так выделена, 2)слева должен быть указатель, т. е. Client*, 3) и т. д.
Оператор new создаёт новый объект лишь в НОРМАЛЬНО РЕАЛИЗУЮЩИХ ООП языках вроде C# или Java, или др.
(я не говорю, что С++ плох, я говорю, что ООП в нём кривое)
И вообще M объявлена как массив, а пытаешься использовать как обычную переменную (для массива - М [индекс] ).
Итог: убери этот for с инициализацией вообще и пользуйся - уже всё создано.
Оператор new создаёт новый объект лишь в НОРМАЛЬНО РЕАЛИЗУЮЩИХ ООП языках вроде C# или Java, или др.
(я не говорю, что С++ плох, я говорю, что ООП в нём кривое)
И вообще M объявлена как массив, а пытаешься использовать как обычную переменную (для массива - М [индекс] ).
Итог: убери этот for с инициализацией вообще и пользуйся - уже всё создано.
Похожие вопросы
- Инициализация массива указателей на объекты.
- Инициализация массива символьного типа. С++
- Инициализация массива. Указатели.
- Почему в С/С++ до сих пор не устранена проблема с выходом массива за границы?
- инициализация объекта в php?
- Люди. ) Расскажите пожалуйста что означает слово ИНИЦИАЛИЗАЦИЯ.
- 1.Заполнить массив случайными числами. Вывести элементы массива на экран. Заменить все его минимальные элементы нулями.
- помогите пожалуйста сделать мне практическую по массивам, пожалуйста!!!
- Задачка на сортировку массивов
- Двумерный массив - Delphi