Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 01.05.2017
Сообщений: 137
1

Возвращение кортежа - error C2679: бинарный "=": не найден оператор, принимающий правый операнд типа

04.09.2019, 01:02. Показов 511. Ответов 6
Метки нет (Все метки)

Привет
есть функция, которая возвращает кортеж
C++
1
tuple<X**, Math, int, int, std::vector<std::vector<int>>*>
я её распаковываю так

C++
1
std::tie(tempPointer, this->Utype, std::ignore, std::ignore, std::ignore) =
Появляется ошибка "error C2679: бинарный "=": не найден оператор, принимающий правый операнд типа"

Насколько я понял проблема в присваивании

C++
1
tempPointer = указательИзКортежа;
нельзя преобразовать "X** в X**". Толи в кортеже этот указатель передается как const? толи еще что. не могу понять. помогите, пожалуйста, в чем проблема? Спасибо заранее за помощь
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.09.2019, 01:02
Ответы с готовыми решениями:

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

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

Error C2679: бинарный ">>": не найден оператор, принимающий правый операнд
перелопатил кучу форумов, кругом одно и то же - якобы вставь библиотеку и будет счастье. раньше...

Error C2679: бинарный "=": не найден оператор, принимающий правый операнд
Ошибка 1 error C2679: бинарный &quot;=&quot;: не найден оператор, принимающий правый операнд типа...

6
С чаем беда...
Эксперт CЭксперт С++
9074 / 4606 / 1250
Регистрация: 18.10.2014
Сообщений: 10,306
04.09.2019, 01:31 2
Цитата Сообщение от большой ДЕН Посмотреть сообщение
толи еще что. не могу понять. помогите, пожалуйста, в чем проблема? Спасибо заранее за помощь
И где у вас в вопросе показано объявление tempPointer? Где у вас видно, что такое this->Utype? Почему вместо полного теста ошибки прведен какой-то огрызок?
0
1 / 1 / 0
Регистрация: 01.05.2017
Сообщений: 137
04.09.2019, 02:03  [ТС] 3
C++
1
X **tempPointer; // это указатель на двумерный массив - в моём случае массив типа double
C++
1
Math Utype; // член класса/ просто свойство объекта
C++
1
2
3
enum Math {
// это просто перечисление
}
все разбросано по разным файлам. поэтому привел вот такой огрызок. извините уж

Добавлено через 5 минут
то есть проблема тут может быть только с указателем на массив или с указателем на вектор

Добавлено через 20 минут
а вот если я вот так распаковываю
C++
1
auto [tempPointer1, tempUtype, tempValue1, tempValue2,  tempVector] =
а потом если присваиваю

C++
1
tempPointer = tempPointer1;
то появляется сообщение "error C2440: const_cast: невозможно преобразовать "_This" в "X **""
0
С чаем беда...
Эксперт CЭксперт С++
9074 / 4606 / 1250
Регистрация: 18.10.2014
Сообщений: 10,306
04.09.2019, 02:07 4
Цитата Сообщение от большой ДЕН Посмотреть сообщение
то появляется сообщение "error C2440: const_cast: невозможно преобразовать "_This" в "X **""
В смысле: у вас в коде нет никакого const_cast, но вы получаете сообщение именно о const_cast?
0
1 / 1 / 0
Регистрация: 01.05.2017
Сообщений: 137
04.09.2019, 02:09  [ТС] 5
да

а вот в оперратор присваивания в кортеже реализован вот так

C++
1
tuple& operator=(const volatile tuple&) = delete;
или вот так

C++
1
2
3
4
5
6
tuple& operator=(const tuple<_Other...>& _Right)
        _NOEXCEPT_COND(_Tuple_nothrow_assignable_v<tuple, const _Other&...>) { // strengthened
        _Myfirst._Val = _Right._Myfirst._Val;
        _Get_rest()   = _Right._Get_rest();
        return *this;
    }
вот я и думаю, может нельзя указатели кортежем передавать
0
С чаем беда...
Эксперт CЭксперт С++
9074 / 4606 / 1250
Регистрация: 18.10.2014
Сообщений: 10,306
04.09.2019, 02:12 6
Цитата Сообщение от большой ДЕН Посмотреть сообщение
вот я и думаю, может нельзя указатели кортежем передавать
Можно. Но вы что-то недоговариваете. Но по вашим обрывкам кода ничего не понятно. Приводите реальный код.
0
1 / 1 / 0
Регистрация: 01.05.2017
Сообщений: 137
04.09.2019, 20:30  [ТС] 7
нашёл причину. мой косяк.
шаблонный класс был объявлен как-то так
C++
1
2
template<typename X>
class myClass;
функция в которой распаковывался кортеж была объявлена так

C++
1
2
template<typename X = int>
void myFunction(X precision = 0);
при вызове функции я не задал параметр по умолчанию и он автоматом оказался типа int. я объявил указатель который должен был принять указатель из кортежа
C++
1
X **tempPointer;
и он оказался тоже int. а кортеж возвращал указатель
C++
1
X **forReturn
который имел тип X, но этот тип икс был типом самого класса. и получилось, что принимающий и возвращаемый указаетли были разного типа. просто исправил имя типа
C++
1
2
template<typename type = int>
void myFunction(type precision = 0);
и все заработало
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.09.2019, 20:30

Помощь в написании контрольных, курсовых и дипломных работ здесь.

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

бинарный "<<": не найден оператор, принимающий правый операнд типа "const ElementType"
С массивом все работает хорошо, а с вектором выдает эту ошибку. #include &lt;iostream&gt; #include...

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

бинарный ">>": не найден оператор, принимающий правый операнд типа "int [4]"
Подскажите, пожалуйста в чем ошибка!!! #include &quot;pch.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt;...


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

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

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