На конструктор по умолчанию нельзя ссылаться так как эта функция удалена
Перейти к содержимому

На конструктор по умолчанию нельзя ссылаться так как эта функция удалена

  • автор:

«На конструктор по умолчанию для [название_структуры] нельзя ссылаться, так как эта функция удалена»

Имеется структура books которая исполняет роль каталога. В неё вложен union books_type , в который, в свою очередь, вложены ещё 2 структуры book и magazine для книги и журнала соответственно. Вот код:

struct books < string name; int year; int pages; union books_type < struct book < string author; >book; struct magazine < string redaction; int articles; >magazine; > books_type; >; 

При попытке определить массив структур:

books* b = new books[MAX]; 

Visual studio выдаёт ошибку на конструктор по умолчанию для «books» нельзя ссылаться, так как эта функция удалена Что в таком случае делать?

Отслеживать
218k 15 15 золотых знаков 117 117 серебряных знаков 229 229 бронзовых знаков
задан 18 мар 2019 в 9:48
45 2 2 серебряных знака 7 7 бронзовых знаков

std::string внутри union гарантирует вам проблемы. (Нужно вручную вызывать конструкторы и деструкторы. ) Возмите std::variant вместо union и не мучайтесь.

Не получается передать структуру в функцию

У меня Visual Studio 2015.
Понятно что оно говорит что нет конструктора просто другими словами, Settings::Settings(const Settings &) — ибо это по идее должен быть конструктор, я знаю что структура это тот же класс, только модификатор доступа по умолчанию отличается от класса, но вопрос остаётся открытым почему вдруг при попытке передать эту структуру в функцию оно требует конструктор, опытным путём было выяснено что если мою структуру из вот такого вида:

1 2 3 4 5 6 7
struct Settings { std::string InputFileName, OutputFileName;//IputFileName - имя входного файла, OutputFileName - имя выходного файла std::ifstream InputFile; // входной файл, std::ofstream OutputFile;// выходной файл std::string PathToMe; // в этой переменной храниться полный путь к запускному файлу bool DeleteAllDuplicateRowsExceptTheLineItself = false; // удалить все дубликаты строки кроме самой строки };

переписать в вот такой:

1 2 3 4 5
struct Settings { std::string InputFileName, OutputFileName;//IputFileName - имя входного файла, OutputFileName - имя выходного файла std::string PathToMe; // в этой переменной храниться полный путь к запускному файлу bool DeleteAllDuplicateRowsExceptTheLineItself = false; // удалить все дубликаты строки кроме самой строки };

в таком случае ошибка пропадает. Помогите пожалуйста разобраться с этим. ОС: Windows 10 1803

На конструктор по умолчанию нельзя ссылаться так как эта функция удалена

Пользователь

Сейчас: Offline
Имя: Виталий
Откуда: Киев
Регистрация: 07.09.2012
DominaN, Я знаю что делает sprintf , меня заинтересовал http метод connect

  • Скопировать ссылку
  • Скопировать как BB-код
  • Перейти к посту

Пользователь

Banschey

Сейчас: Offline
Имя: Banschey
Откуда: Донецк, Украина
Регистрация: 22.03.2015

Как правильно передать аргументы в функцию на поток threads ? Одни аргумент могу передать когда дело доходит но набора хотябы из двух аргументов начинает выдавать ошибки:

IntelliSense: отсутствуют экземпляры конструктора «sf::Thread::Thread», соответствующие списку аргументов
типы аргументов: (void (*)(int Chek, sf::RenderWindow &window), int, sf::RenderWindow)

Ошибка IntelliSense: на функция «sf::RenderWindow::RenderWindow(const sf::RenderWindow &)» (объявлено неявно) нельзя ссылаться, так как эта функция удалена

Ошибка C2198 void (__cdecl *)(int,sf::RenderWindow &): слишком мало аргументов для вызова

// нужно передать
( Int chek, RenderWindow & window )
//Сама функция
void func ( int Chek,RenderWindow & window )
//Гдето в коде
sf :: Thread thread ( & func, ( Chek,window ) ) ; //Тут ошибки как не формулируй
thread. launch ( ) ;

  • Скопировать ссылку
  • Скопировать как BB-код
  • Перейти к посту

Пользователь

Naik

Сейчас: Offline
Имя: %name%
Регистрация: 14.03.2010

Не пойму, что ему не нравится? Делал параметр функции const, тогда ошибки при append в строку (и +=)

Исправил на
std::accumulate(childs.begin() + 1, childs.end(), childs[0], [ & text, op](Expr &a, Expr &b) Но осталось 2 ошибки

Открыть спойлер
Закрыть спойлер

/usr/include/c++/4.8/bits/stl_numeric.h:154: error: no match for ‘operator=’ (operand types are ‘Expr’ and ‘void’)
__init = __binary_op(__init, *__first);
^
/usr/include/c++/4.8/bits/stl_numeric.h:154: candidates are:
logicfunction.cpp:1: In file included from ../LogicCalc/logicfunction.cpp:1:0:
logicfunction.h:13: Expr& Expr::operator=(const Expr&)
class Expr
^
.
.
QT/5.4/gcc_64/include/QtCore/qvector.h:-1: In instantiation of ‘void QVector::defaultConstruct(T*, T*) [with T = Expr]’:

Непонятно зачем ему дефолтный конструктор вообще..

Вторая ошибка тоже требует консруктор

QT/5.4/gcc_64/include/QtCore/qvector.h:281: error: no matching function for call to ‘Expr::Expr()’
new (from++) T();
QT/5.4/gcc_64/include/QtCore/qvector.h:281: candidates are:
logicfunction.cpp:13: Expr::Expr(ExprType, bool)
Expr::Expr(ExprType _type, bool _inverse)
^
^

Изменено Naik (3.05 / 12:51) (всего 5 раз)

Прикрепленные файлы:
scr.png (117.37 кб.) Скачано 281 раз

  • Скопировать ссылку
  • Скопировать как BB-код
  • Перейти к посту

Пользователь

vl@volk

Сейчас: Offline
Имя: Владислав
Откуда: Земля
Регистрация: 26.12.2012

Naik, насколько понятно из ошибки, то print не поддерживает QString (хотя он вообще не поддерживает объекты). Сделай конвертацию в char*

__________________

знает толк

  • Скопировать ссылку
  • Скопировать как BB-код
  • Перейти к посту

Пользователь

Naik

Сейчас: Offline
Имя: %name%
Регистрация: 14.03.2010

vl@volk, print как бы это моя функция (она на скрине)
Добавил конструктор по умолчанию в класс Expr, теперь требует определить операцию = для класса с типом void. Типа что б можно было сделать так Expr e = (void).
Короче я лучше через for сделаю чем с такими лямбдами

  • Скопировать ссылку
  • Скопировать как BB-код
  • Перейти к посту

Пользователь

vl@volk

Сейчас: Offline
Имя: Владислав
Откуда: Земля
Регистрация: 26.12.2012

Naik, я сам иногда в непонимании от некоторых спецификаций плюсов, надо учебник какой-нибудь посерьезнее с рассмотрением многих проблем

__________________

знает толк

  • Скопировать ссылку
  • Скопировать как BB-код
  • Перейти к посту

Модератор форума

Ксакеп

Сейчас: Offline
Регистрация: 20.06.2012
Naik, читай reference по accumulate. Ну и пишут обычно [=text, =op]

  • Скопировать ссылку
  • Скопировать как BB-код
  • Перейти к посту

Пользователь

DominaN

Сейчас: Offline
Имя: Кирилл
Откуда: Смоленск
Регистрация: 28.09.2011
Сдались вам эти лямбды на плюсах

  • Скопировать ссылку
  • Скопировать как BB-код
  • Перейти к посту

Пользователь

Сейчас: Offline
Имя: Сергей
Регистрация: 13.10.2014

Привет всем прогерам. Нужна ваша помощь) задача вроде не очень тяжёлая, но не могу понять как написать. Сама программа: Написать программу на С ++, которая считывает два имени файла с клавиатуры и выводит на экран слова, которые появляются в обоих файлах в отсортированном порядке и без дублирования. Слово определяется как последовательность символов, которая не содержит символа «Space» «Tab» «Enter».
Вы не можете сделать никаких предположений о размерах файлов.
Пожалуйста, выручите.

  • Скопировать ссылку
  • Скопировать как BB-код
  • Перейти к посту

Модератор форума

Visual Studio, почему происходит проваливание в файл?

В ней меня интересует streampos(-1) , в этом файле этот тип не объявлен, но если в него (ctrl+клик по слову) провалится, то студия перебрасывает в файл iosfwd на класс fpos . Как это происходит?
В самом файле streambuf есть только #include , в котором есть

1 2 3 4
#if _HAS_OLD_IOSTREAMS_MEMBERS typedef _STD streamoff streamoff; typedef _STD streampos streampos; #endif /* _HAS_OLD_IOSTREAMS_MEMBERS */

Но здесь typedef _STD streampos streampos; по 1-му streampos опять происходит проваливание в файл iosfwd на класс fpos , но ни один хедер xiosbase

1 2 3
#include #include #include

не содержит streampos .

Как студия находит «дорогу» от streampos(-1) до конструктора fpos ?

Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Почему у меня MASM32 не правильно работает в Visual studio когда уже установлен внутри настройки visual studio code ?
Почему у меня MASM32 не правильно работает в Visual studio когда уже установлен внутри настройки.

Почему Visual Studio Code не компилирует файл с расширением C
Здравствуйте, не могу скомпилировать файл, пишу gcc или жму ф5 всё равно ничего не происходит, вот.

Ini-файл: чтение происходит без проблем, но запись в файл не происходит, почему?
Пытаюсь научиться работать с ini файлам, чтение происходит без проблем но запись в файл не.

Не открывается файл Visual Studio Solution (.sln) в самом Visual Studio
Доброго дня. Такая проблема. Не открывается файл Visual Studio Solution (.sln) в самом Visual.

Эксперт CЭксперт С++

11126 / 6084 / 1663
Регистрация: 18.10.2014
Сообщений: 15,295

ЦитатаСообщение от Timurs Посмотреть сообщение

Как студия находит «дорогу» от streampos(-1) до конструктора fpos ?

using streampos = fpos_Mbstatet>;

а путей включения в , я подзреваю, немало.

Например, включен в . И есть

Эксперт С++

8737 / 4315 / 960
Регистрация: 15.11.2014
Сообщений: 9,760

ЦитатаСообщение от Timurs Посмотреть сообщение

Как студия находит «дорогу» от streampos(-1) до конструктора fpos ?

сканирует все файлы проекта,
и собирает информацию о том, какие они подключают #include

ЦитатаСообщение от Timurs Посмотреть сообщение

в версии Visual Studio 2019 подключает:

1>Примечание: включение файла: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\include\streambuf 1>Примечание: включение файла: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\include\xiosbase 1>Примечание: включение файла: C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt\share.h 1>Примечание: включение файла: C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt\corecrt_share.h 1>Примечание: включение файла: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\include\system_error 1>Примечание: включение файла: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\include\__msvc_system_error_abi.hpp 1>Примечание: включение файла: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\include\cerrno 1>Примечание: включение файла: C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt\errno.h 1>Примечание: включение файла: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\include\stdexcept 1>Примечание: включение файла: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\include\exception 1>Примечание: включение файла: C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt\malloc.h 1>Примечание: включение файла: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\include\vcruntime_exception.h 1>Примечание: включение файла: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\include\eh.h 1>Примечание: включение файла: C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt\corecrt_terminate.h 1>Примечание: включение файла: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\include\xstring 1>Примечание: включение файла: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\include\iosfwd 1>Примечание: включение файла: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\include\cstdio 1>Примечание: включение файла: C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt\stdio.h 1>Примечание: включение файла: C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt\corecrt_wstdio.h 1>Примечание: включение файла: C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt\corecrt_stdio_config.h 1>Примечание: включение файла: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\include\cstring 1>Примечание: включение файла: C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt\string.h 1>Примечание: включение файла: C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt\corecrt_memory.h 1>Примечание: включение файла: C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt\corecrt_memcpy_s.h 1>Примечание: включение файла: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\include\vcruntime_string.h 1>Примечание: включение файла: C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt\corecrt_wstring.h 1>Примечание: включение файла: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\include\cwchar 1>Примечание: включение файла: C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt\wchar.h 1>Примечание: включение файла: C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt\corecrt_wconio.h 1>Примечание: включение файла: C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt\corecrt_wctype.h 1>Примечание: включение файла: C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt\corecrt_wdirect.h 1>Примечание: включение файла: C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt\corecrt_wio.h 1>Примечание: включение файла: C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt\corecrt_wprocess.h 1>Примечание: включение файла: C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt\corecrt_wtime.h 1>Примечание: включение файла: C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt\sys/stat.h 1>Примечание: включение файла: C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt\sys/types.h 1>Примечание: включение файла: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\include\xmemory 1>Примечание: включение файла: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\include\cstdint 1>Примечание: включение файла: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\include\stdint.h 1>Примечание: включение файла: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\include\limits 1>Примечание: включение файла: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\include\cfloat 1>Примечание: включение файла: C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt\float.h 1>Примечание: включение файла: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\include\climits 1>Примечание: включение файла: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\include\intrin0.h 1>Примечание: включение файла: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\include\isa_availability.h 1>Примечание: включение файла: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\include\new 1>Примечание: включение файла: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\include\xatomic.h 1>Примечание: включение файла: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\include\xutility 1>Примечание: включение файла: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\include\utility 1>Примечание: включение файла: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\include\xpolymorphic_allocator.h 1>Примечание: включение файла: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\include\tuple 1>Примечание: включение файла: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\include\xcall_once.h 1>Примечание: включение файла: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\include\xerrc.h 1>Примечание: включение файла: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\include\atomic 1>Примечание: включение файла: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\include\xthreads.h 1>Примечание: включение файла: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\include\xtimec.h 1>Примечание: включение файла: C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt\time.h 1>Примечание: включение файла: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\include\xlocale 1>Примечание: включение файла: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\include\memory 1>Примечание: включение файла: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\include\typeinfo 1>Примечание: включение файла: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\include\vcruntime_typeinfo.h 1>Примечание: включение файла: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\include\xfacet 1>Примечание: включение файла: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\include\xlocinfo 1>Примечание: включение файла: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29333\include\xlocinfo.h 1>Примечание: включение файла: C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt\ctype.h 1>Примечание: включение файла: C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt\locale.h

57 / 47 / 14
Регистрация: 23.02.2016
Сообщений: 433

TheCalligrapher, hoggy, спасибо. Я никак не могу понять, что собственно возвращаться тут будет.
Казалось бы fpos(-1) , но что это? Объект? Опять же если это объект, то не понимаю какими значениями инициализируются его поля

1 2 3 4 5 6 7
private: streamoff _Myoff; // stream offset fpos_t _Fpos; // TRANSITION, ABI. C file position, not currently used _Statetype _Mystate; // current conversion state }; using streampos = fpos_Mbstatet>;

по конструктору

1 2 3 4
/* implicit */ fpos(streamoff _Off = 0) : _Myoff(_Off), _Fpos(0), _Mystate() { // construct with stream offset }

_Myoff: -1 _Fpos: 0 _Mbstatet _Mystate:

1 2 3 4 5
typedef struct _Mbstatet { // state of a multibyte translation unsigned long _Wchar; unsigned short _Byte, _State; } _Mbstatet;

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *