Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
0 / 0 / 1
Регистрация: 05.09.2014
Сообщений: 94
1

Что за ошибка при вызове конструктора?

16.04.2015, 03:31. Показов 1527. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Компилятор ругается на строчку внутри цикла

C++
1
2
3
4
while((c = getchar()) != '\n') 
{
q = new Sym(c);
}
Sym - класс, а c - переменная, объявленная в класса как int;
конструктор класса Sym: Sum(unsigned char cc);

Ругается следующим образом:

error: no match for 'operator=' in 'q = (((Sym*)operator new(12u)), (<anonymous>->Sym::Sym(((int)((unsigned char)c))), <anonymous>))'
compilation terminated due to -Wfatal-errors.

Я так понимаю что что-то с типами, но никак не могу понять как исправить!
Спасибо!
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.04.2015, 03:31
Ответы с готовыми решениями:

Ошибка при вызове конструктора с параметрами
подскажите, почему при вызове конструктора с параметрами выдает ошибку сегментации ...

Зачем двоеточие при вызове конструктора?
Доброго времени суток, вот есть код, объясните зачем тут двоеточия при вызове конструктора? class...

Крашится приложение при вызове конструктора
Здравствуйте. Написал класс, а при вызове конструктора (класса Ground) приложение крашится. Где я...

При вызове конструктора ошибка: L "Buffer is too small" & & 0
Привет. При вызове конструктора вылетает эта ошибка. Student(char *n, char *s, char *p, int...

8
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
16.04.2015, 07:18 2
с должна быть unsigned char
C++
1
q = new Sym((unsigned char)c);
0
Эксперт по математике/физикеЭксперт С++
2048 / 1366 / 395
Регистрация: 16.05.2013
Сообщений: 3,505
Записей в блоге: 6
16.04.2015, 07:49 3
Типы q и с? Конструктор Sym.
0
0 / 0 / 1
Регистрация: 05.09.2014
Сообщений: 94
16.04.2015, 07:55  [ТС] 4
Получилось исправить. Решение было для меня неожиданным: была записано
C++
1
Sym*  a, q;
- при этом выдавалась та самая ошибка.
Когда написал:
C++
1
2
Sym* a;
Sym* q;
- все стало работать...
Но почему так нельзя объявлять я так и не понял...
0
6 / 6 / 5
Регистрация: 05.04.2015
Сообщений: 25
16.04.2015, 08:19 5
Потому- что компилятор не знал как себя вести с твоим классом, тебе надо было перегрузить оператор "=" что бы так записать.
0
18840 / 9839 / 2408
Регистрация: 30.01.2014
Сообщений: 17,280
16.04.2015, 08:43 6
Лучший ответ Сообщение было отмечено Ilot как решение

Решение

Цитата Сообщение от студ Посмотреть сообщение
Но почему так нельзя объявлять я так и не понял...
Звездочка относится к имени переменной.
Первым ты определил указатель, а вторым - уже объект.
Чтобы сработало в первоначальной записи, нужно было так:
C++
1
Sym * a, * q;

Не по теме:


Этот вопрос, кстати, очень ясно показывает то, насколько важно правильно выкладывать проблемный код. Ведь из первоначального поста небыло никакой возможности узнать в чем истинная проблема в твоем коде. А телепатов тут все еще очень мало.

1
Эксперт по математике/физикеЭксперт С++
2048 / 1366 / 395
Регистрация: 16.05.2013
Сообщений: 3,505
Записей в блоге: 6
16.04.2015, 08:59 7
Цитата Сообщение от mib4e Посмотреть сообщение
Потому- что компилятор не знал как себя вести с твоим классом, тебе надо было перегрузить оператор "=" что бы так записать.
Не правда. DrOffset все верно указал.
А от себя добавлю - всегда обяъвляйте переменные в новой строке. Это очень важно. Первая причина этого то что указанно в этой теме. Еще одна это порядок конструирования переменных членов класса.
DrOffset, последний комментарий нужно писать не как оффтоп, а большими жирными буквами, что бы всем было понятно. Например так:
 Комментарий модератора 
Правила форума п 4.7 Как можно более полно описывайте суть проблемы или вопроса, что было сделано для ее решения и какие результаты получены.
0
18840 / 9839 / 2408
Регистрация: 30.01.2014
Сообщений: 17,280
16.04.2015, 09:03 8
Цитата Сообщение от Ilot Посмотреть сообщение
Не правда
Нет, ну если q - это самописный смартпойнтер, а автор забыл сделать ему operator=, то и этот ответ будет верным. Но т.к. автор не конкретизировал что такое q в первом посте, оставалось только гадать что же происходит
0
0 / 0 / 1
Регистрация: 05.09.2014
Сообщений: 94
16.04.2015, 09:44  [ТС] 9
DrOffset, спасибо, теперь понял, действительно не правильно написал!
0
16.04.2015, 09:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.04.2015, 09:44
Помогаю со студенческими работами здесь

Ошибка при вызове конструктора (ДвоичныеДанные)
Почему ошибка выдает Ошибка при вызове конструктора (ДвоичныеДанные) НовоеВложение.Хранилище =...

Почему при вызове конструктора из конструктора нельзя передавать this как аргумент?
Есть такой код: public class Order { { } Order(){ ...

Ошибка при вызове конструктора по причине:-2147221005(0x800401F3): Недопустимая строка с указанием класса
Пытаюсь запустить конфигурацию, выходит такая ошибка: ...

Ошибка при вызове статического конструктора статического класса
Здравствуйте! Проблема в следующем: Есть класс public static class 1 { static...

Ошибка "имена не существуют в текущем контексте" при вызове конструктора базового класса
ошибка в base(title, produce, form) (produce, form не существуют в текущем контексте) class...

Access violation при вызове конструктора
Здравствуйте! У меня при вызове конструктора возникает ошибка. Access violation at adress...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru