Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/13: Рейтинг темы: голосов - 13, средняя оценка - 5.00
Praktolock
71 / 71 / 18
Регистрация: 29.11.2011
Сообщений: 345
1

Конструкторы, приведение типа и ошибка "Не найден оператор, принимающий правый операнд типа 'char *'"

07.05.2014, 10:58. Просмотров 2532. Ответов 5
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
class A
{
 int somemember;
public:
 A(){printf("A()\n");}
 A(char*){printf("A(char*)\n");}
 
 A(A&){printf("A(A&)\n");}
 ~A(){printf("~A()\n");}
 //A&operator=(A&a){printf("A&operator=(A&)\n");}
};
 
 
int _tmain(int argc, _TCHAR* argv[])
{
 A a;
 char*str="ololo";
 a=str;
    return 0;
}
Почему, компилятор перестает понимать, как нужно приводить char* к A, если раскоментировать строку с оператором присваивания (error C2679: бинарный '=': не найден оператор, принимающий правый операнд типа 'char *' (или приемлемое преобразование отсутствует))?.

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.05.2014, 10:58
Ответы с готовыми решениями:

Ошибка "не найден оператор, принимающий правый операнд типа "const std::string" "
Привет. Подчеркивает Name. Как можно обратиться к public string из класса...

Шаблоны класса:Матрица. Ошибка бинарный "=": не найден оператор, принимающий правый операнд типа "Matr<T>"
Выдает ошибку &quot;бинарный &quot;=&quot;: не найден оператор, принимающий правый операнд...

Ошибка : бинарный "<<": не найден оператор, принимающий правый операнд типа point
В задаче нужно найти две наиболее удаленные друг от друга очки. выдает...

Error C2679: бинарный "<<": не найден оператор, принимающий правый операнд типа "std::string" (или приемлемое
эмулятор работы банкомата Например #include &quot;stdafx.h&quot; #include...

Классы: не найден оператор, принимающий правый операнд типа "Book"
Хотел (задали) создать телефонную книгу с помощью класса.Вот что я накидал.И...

5
John Prick
837 / 768 / 258
Регистрация: 27.07.2012
Сообщений: 2,180
Завершенные тесты: 3
07.05.2014, 11:25 2
Покажите код, в котором вы это используете.
Оператор копирующего присваивания лучше написать так:
C++
1
2
3
4
5
A& operator=(const A & a)
{
    printf("A&operator=(A&)\n");
    return *this;
}
1
Jupiter
Каратель
Эксперт С++
6570 / 3991 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
07.05.2014, 11:26 3
Лучший ответ Сообщение было отмечено Praktolock как решение

Решение

Цитата Сообщение от Praktolock Посмотреть сообщение
a=str;
19-я строка превращается в это:
C++
1
a.operator=(A(str));
временный объект нельзя передавать по ссылке (как в вашем операторе =),
а по ссылке на константу (как в операторе который генерирует компилятор по умолчанию) - можно
1
aLarman
646 / 567 / 164
Регистрация: 13.12.2012
Сообщений: 2,123
Завершенные тесты: 2
07.05.2014, 11:27 4
Цитата Сообщение от Praktolock Посмотреть сообщение
бинарный '=': не найден оператор, принимающий правый операнд типа 'char *'
ну логично что Вы передаёте char* а ожидается A,
0
Jupiter
Каратель
Эксперт С++
6570 / 3991 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
07.05.2014, 11:30 5
Цитата Сообщение от aLarman Посмотреть сообщение
ну логично что Вы передаёте char* а ожидается A
конструктор не explicit
0
Praktolock
71 / 71 / 18
Регистрация: 29.11.2011
Сообщений: 345
07.05.2014, 11:32  [ТС] 6
Цитата Сообщение от Jupiter Посмотреть сообщение
временный объект нельзя передавать по ссылке
Все встало на свои места

Добавлено через 1 минуту
Цитата Сообщение от Jupiter Посмотреть сообщение
19-я строка превращается в это:
Код C++
1
a.operator=(A(str));
Тогда уш проще
C++
1
a=A(str);
0
07.05.2014, 11:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.05.2014, 11:32

Error C2679: бинарный "=": не найден оператор, принимающий правый операнд типа
Сразу скажу что в с++ полный ноль. Но есть потребность решить такую вот задачу:...

Ошибка в коде. не найден оператор, принимающий правый операнд типа 'int'
Доброго времени суток. Не понимат что за ошибка: error C2679: бинарный '&gt;': не...

Ошибка C2679: бинарный '=': не найден оператор, принимающий правый операнд типа 'double'
// ConsoleApplication2.cpp : Defines the entry point for the console...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru