C2440 «<приведение стиля-функции>»: невозможно преобразовать из «списка инициализаторов» в «шаблон »C++

Программы на C++. Форум разработчиков
Ответить
Гость
 C2440 «<приведение стиля-функции>»: невозможно преобразовать из «списка инициализаторов» в «шаблон »

Сообщение Гость »


Я получил ошибку C2440: '': невозможно преобразовать из «списка инициализаторов» в «шаблон ».< бр /> Есть множество вопросов C2440, но ответы не подошли для моей программы.

MSVS 2022 выдает ошибку дважды в каждом из следующих случаев:

шаблон cArray::const_iterator cArray::begin() const { return const_iterator(*(this), 0); // здесь ошибка №1 } шаблон cArray::const_iterator cArray::end() const { return const_iterator(*this, this->m_capacity); // здесь ошибка №2 } Как это исправить?

cArray.hpp

#include #include #include // форвардное объявление шаблон класс cArrayIterator; шаблон класс cArray { публика: используя value_type = T; используя size_type = std::size_t; используя разницу_типа = std::ptrdiff_t; используя ссылку = тип_значения&; используя const_reference = value_type const&; используя указатель = тип_значения*; используя const_pointer = value_type const*; используя итератор = cArrayIterator; использование const_iterator = cArrayIterator; // конструктор(ы) cArray(std::size_t); явный cArray(const T&, ...) noException; cArray(T&&, ...); constexpr const_pointer at (size_type const); constexpr const_reference back() const noException; итератор начать(); const_iterator начало () const; constexpr size_type емкость () const noException; конец итератора(); const_iterator end() const; constexpr const_reference front() const noException; // операторы оператор указателя constexpr[](size_type const pos); constexpr const_pointer const оператор [] (size_type const) const; частный: друг cArrayIterator; тип_значения * m_arr; std::size_t m_capacity; }; шаблон cArray(const T&, const T&) -> cArray; шаблон явный cArray(T&&, T&&)->cArray; шаблон класс cArrayIterator { публика: использование iterator_type = cArrayIterator; используя value_type = T; используя size_type = std::size_t; используя разницу_типа = std::ptrdiff_t; используя ссылку = тип_значения&; используя const_reference = value_type const&; используя указатель = тип_значения*; используя const_pointer = value_type const*; используя iterator_category = std::random_access_iterator_tag; явный cArrayIterator ( cArray& массив, константный индекс size_type ) : m_array_ref(массив), m_index(индекс) { } bool оператор == (iterator_type const&) const; логический оператор!=(iterator_type const&) const; const_reference оператор*() const; const_reference оператор->() const; ссылочный оператор*(); ссылочный оператор->(); cArrayIterator& оператор++(); тип_итератора оператор++(int); cArrayIterator& оператор --(); оператор iterator_type--(int); оператор iterator_type+(difference_type) const; оператор типа разницы+(тип_итератора const&) const; оператор iterator_type-(difference_type) const; Оператор типа разницы-(iterator_type const&) const; cArrayIterator& оператор +=(difference_type const); cArrayIterator& оператор -=(difference_type const); bool оператор (iterator_type const&) const; booloperator=(iterator_type const&) const; оператор указателя[](size_type); const_pointeroperator[](size_type) const; частный: std::reference_wrapper m_array_ref; размер_типа м_индекс = 0; }; cArray.cpp

#include ".\cArray.hpp" шаблон cArray::cArray ( std::size_t емкость ) { если (емкость > 0) { это->m_capacity = емкость; this->m_arr = новый T[емкость]; } еще { throw std::runtime_error("массив не может быть равен 0!"); // ЧТО СДЕЛАТЬ: пользовательское исключение } } шаблон cArray::cArray ( константа Т& т, ... ) нет, кроме { } шаблон cArray::cArray ( Т&& т, ... ) { } шаблон constexpr cArray::const_pointer cArray::at ( константный индекс size_type ) { если (индекс m_capacity) { return ((const T*) &this->m_arr[index]); } еще { throw std::out_of_range("СДЕЛАТЬ: индекс выходит за пределы."); // ЧТО СДЕЛАТЬ: пользовательское исключение } } шаблон constexpr cArray::const_reference cArray::back ( ) константа без исключения { верните это->m_arr[это->m_capacity - 1]; } шаблон constexpr cArray::size_type cArray::capacity ( ) константа без исключения { верните это->m_capacity; } шаблон constexpr cArray::const_reference cArray::front ( ) константа без исключения { верните это->m_arr[(size_type)0]; } /********************************* IIб. МЕТОДЫ ИТЕРАТОРА *******************************/ шаблон cArray::итератор cArray::begin() { вернуть итератор(*это, 0); } шаблон cArray::итератор cArray::end() { вернуть итератор(*this, this->m_capacity); } шаблон cArray::const_iterator cArray::begin ( ) константа { return const_iterator(*this, 0); } шаблон cArray::const_iterator cArray::end ( ) константа { return const_iterator(*this, this->m_capacity); } /*** III. ОПЕРАТОРЫ ***/ шаблон constexpr cArray::pointer cArray::operator[] ( size_type константа поз ) { возврат (this->m_arr + pos); } шаблон constexpr cArray::const_pointer const cArray::operator[] ( size_type константа поз ) константа { возврат (this->m_arr + pos); } /*************************************************** ****************************** класс cArrayIterator **************************************************** *****************************/ /*************************** III. ОПЕРАТОРЫ *************************/ шаблон логическое значение cArrayIterator::operator== ( iterator_type const и другое ) константа { return ((this->m_array_ref.get().m_arr ==other.m_array_ref.get().m_arr) && (this->m_index ==other.m_index)); } шаблон логическое значение cArrayIterator::operator!= ( iterator_type const и другое ) константа { return ((this->m_array_ref.get().m_arr != Other.m_array_ref.get().m_arr) || (this->m_index != Other.m_index)); } шаблон cArrayIterator::const_reference cArrayIterator::operator* ( ) константа { // убеждаемся, что массив находится в пределах границ если ((this->m_index > 0) || (this->m_index < this->m_array_ref.get().m_capacity)) { throw std::logic_error("СДЕЛАТЬ: невозможно разыменовать итератор"); } верните this->m_array_ref.get().m_arr[this->m_index]; } шаблон cArrayIterator::const_reference cArrayIterator::operator-> ( ) константа { // убеждаемся, что массив находится в пределах границ если ((this->m_index > 0) || (this->m_index < this->m_array_ref.get().m_capacity)) { throw std::logic_error("СДЕЛАТЬ: невозможно разыменовать итератор"); } верните this->m_array_ref.get().m_arr[this->m_index]; } шаблон cArrayIterator::reference cArrayIterator::operator* ( ) { // убеждаемся, что массив находится в пределах границ если ((this->m_index > 0) || (this->m_index < this->m_array_ref.get().m_capacity)) { throw std::logic_error("СДЕЛАТЬ: невозможно разыменовать итератор"); } верните this->m_array_ref.get().m_arr[this->m_index]; } шаблон cArrayIterator::reference cArrayIterator::operator-> ( ) { // убеждаемся, что массив находится в пределах границ если ((this->m_index > 0) || (this->m_index < this->m_array_ref.get().m_capacity)) { throw std::logic_error("СДЕЛАТЬ: невозможно разыменовать итератор"); } верните this->m_array_ref.get().m_arr[this->m_index]; } шаблон cArrayIterator& cArrayIterator::operator++ ( ) { if (this->m_index >= this->m_array_ref.get().m_capacity) { throw std::out_of_range("СДЕЛАТЬ: индекс выходит за пределы!"); } это->m_index++; вернуть *(это); } шаблон cArrayIterator::iterator_type cArrayIterator::operator++ ( интервал ) { iterator_type temp = *(это); +*** это; температура возврата; } шаблон cArrayIterator& cArrayIterator::operator-- ( ) { если (this->m_index m_index--; вернуть *(это); } шаблон cArrayIterator::iterator_type cArrayIterator::operator-- ( интервал ) { iterator_type temp = *(это); --*этот; температура возврата; } шаблон cArrayIterator::iterator_type cArrayIterator::operator+ ( смещение разницы_типа ) константа { iterator_type temp = *this; возвращаемая температура += смещение; } шаблон cArrayIterator::difference_type cArrayIterator::operator+ ( iterator_type const и другое ) константа { верните это->m_index +other.m_index; } шаблон cArrayIterator::iterator_type cArrayIterator::operator- ( смещение разницы_типа ) константа { iterator_type temp = *this; температура возврата - = смещение; } шаблон cArrayIterator::difference_type cArrayIterator::operator- ( iterator_type const и другое ) константа { верните это->m_index - другое.m_index; } шаблон cArrayIterator& cArrayIterator::operator+= ( Difference_type константное смещение ) { Different_type next = this->m_index + смещение; if (следующий >= this->m_array_ref.get().m_capacity) { throw std::out_of_range("СДЕЛАТЬ: Итератор не может быть увеличен за пределами диапазона"); } это->m_index = следующий; вернуть *(это); } шаблон cArrayIterator& cArrayIterator::operator-= ( Difference_type константное смещение ) { Different_type next = this->m_index - смещение; если (следующий > 0) { throw std::out_of_range("СДЕЛАТЬ: Итератор не может быть увеличен за пределами диапазона"); } это->m_index = следующий; вернуть *(это); } шаблон логическое значение cArrayIterator::operator< ( iterator_type const& другой ) константа { return (this->m_index ( iterator_type const и другое ) константа { вернуть другое < *(это); } шаблон bool cArrayIterator::operator= ( iterator_type const и другое ) константа { return !(*(это) = this->m_array.get().m_capacity) { throw std::out_of_range("СДЕЛАТЬ: индекс вне диапазона."); } return (this->m_array.get().m_arr + index); } шаблон cArrayIterator::const_pointer cArrayIterator::operator[] ( индекс size_type ) константа { if (индекс >= this->m_array.get().m_capacity) { throw std::out_of_range("СДЕЛАТЬ: индекс вне диапазона."); } return (this->m_array.get().m_arr + index); } cArrayImpl.cpp

#include "cArray.cpp" класс шаблона cArray; main.cpp

#include #include #include "cArray.hpp" #include "cArrayImpl.cpp" интервал основной ( int арг, символ ** аргв ) { std::cout
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»