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

Конструктор Шредингера "нет подходящего конструктора по умолчанию", хотя он есть

08.03.2015, 11:45. Показов 2143. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
собственно, код. на 156-й строке ( cont(circi) ругается на отсутствие конструктора в классе.
но он там есть! я его видел!
а если серьезно, то у меня нет идей, что может не нравится в таком конструкторе ( cont (circ &part) )
программа должна выводить, пересекаются ли окружности, затем объект со сравнением, координатами и радиусом записывать в хранилище
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
#include<stdio.h>
#include<math.h>
#include<iostream>
#include<string.h>
#include<clocale>
using namespace std;//var27
 
class info//окружность
{   
    private:
        float rad, x, y;
    public:
        info () {rad=5;x=y=0;}
        info (float a) {rad=a;x=y=0;}
        info (float q,float w) {rad=5;x=q;y=w;}
        info (float a,float q,float w) {rad=a;x=q;y=w;}
        float outr () {return rad;}
        float outx () {return x;}
        float outy () {return y;}
};
 
class circ//две сравниваемые окружности и сам процесс
{
    private:
        info circ1,circ2;
    public:
        float dlin ()
        {
            return pow(pow(circ1.outx()-circ2.outx(),2)+pow(circ1.outy()-circ2.outy(),2),1/2);
        }
        int end () 
        {
            if ((circ1.outr()+circ2.outr()<=dlin())&&(circ1.outr()<circ2.outr()+dlin())&&(circ2.outr()<circ1.outr()+dlin()))
                return (true);
            else
                return (false);
        }
        void vvod1(int a)
        {
            if (a==1)
                info circ1();
            else 
                if (a==2)
                {
                    float z;cin>>z;
                    info circ1(z);
                }
                else
                    if (a==3)
                    {
                        float z;cin>>z;
                        float b;cin>>b;
                        info circ1(z,b);
                    }
                    else
                        if (a==4)
                        {
                            float z;cin>>z;
                            float b;cin>>b;
                            float c;cin>>c;
                            info circ1(z,b,c);
                        }
        }
        void vvod2(int a) 
        {
            if (a==1)
                info circ2();
            else 
                if (a==2)
                {
                    float z;cin>>z;
                    info circ2(z);
                }
                else
                    if (a==3)
                    {
                        float z;cin>>z;
                        float b;cin>>b;
                        info circ2(z,b);
                    }
                    else
                        if (a==4)
                        {
                            float z;cin>>z;
                            float b;cin>>b;
                            float c;cin>>c;
                            info circ2(z,b,c);
                        }
        }
        /*
        void outr1(){circ1.outr();}
        void outx1(){circ1.outx();}
        void outy1(){circ1.outy();}
        void outr2(){circ2.outr();}
        void outx2(){circ2.outx();}
        void outy2(){circ2.outy();}*/
};
 
struct box//элемент односвязного списка для класса-контейнера
{
    circ all;
    box *next;
};
 
class cont//класс-контейнер
{
    private:
        box *top, *q;
        bool doom;
    public:
        cont (circ &part) 
        {
            if (doom!=true) 
            {
                top=new box;
                top->next=NULL;
                top->all=part;
                doom=true;
            }
            else
            {
                q=new box;
                q->next=top;
                top=q;
                top->all=part;
            }
        }
};
 
 
void main()
{
    setlocale(LC_ALL, "RUS");
    circ circi;
    int a, b;
    cout<<"Введите кол-во сравнений.\n";
    cin>>b;
    for(int i=0;i<b;i++)
    {
        a=0;
        while((a<1)||(a>4))
        {
            cout<<"Первая окружность. Введите 1 для стандартных координат и радуса(5;0.0), \n2 для изменения лишь радуса, 3 только координат, 4 радиусa и координат. \n";
            cin>>a;
            circi.vvod1(a);
            if ((a<1)||(a>4)) cout<<"введено неверное значение\n";
        }
        a=0;
        while((a<1)||(a>4))
        {
            cout<<"Вторая окружность. Введите 1 для стандартных координат и радуса(5;0.0), \n2 для изменения лишь радуса, 3 только координат, 4 радиусa и координат. \n";
            cin>>a;
            circi.vvod2(a);
            if ((a<1)||(a>4)) cout<<"Введено неверное значение!!!\n";
        }
        cont(circi);
        if ( circi.end()==1 ) cout<<"окружности пересекаются"; else cout<<"окружности не пересекаются";
    }
    system("pause");
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.03.2015, 11:45
Ответы с готовыми решениями:

Visual жалуется на конструктор "Error C2512: нет подходящего конструктора по умолчанию"
Привет, мне Visual C++ выдал такие ошибки делаю все как в уроке, пытаюсь описать класс в заголовочном файле, вот код с...

Нет подходящего конструктора по умолчанию
Всем привет :) Есть вот такой код#include &lt;vector&gt; #include &lt;SFML/Graphics.hpp&gt; using namespace sf; class Animation { public:...

Нет подходящего конструктора по умолчанию
У меня класс, где я хочу сделать конструктор с параметром по умолчанию, но он почему-то не принимает его за конструктор по умолчанию, и...

8
Модератор
Эксперт С++
 Аватар для zss
13772 / 10965 / 6491
Регистрация: 18.12.2011
Сообщений: 29,242
08.03.2015, 12:34
Цитата Сообщение от Daniil Посмотреть сообщение
cont(circi);
При объявлении надо указывать имя экземпляра.
C++
1
cont  cont1(circi);
Только какой в этом смысл? Вы нигде не используете этот экземпляр.

41 строка
Цитата Сообщение от Daniil Посмотреть сообщение
if (a==1)
info circ1();
circ1 уже объявлена как info.
Что Вы хотели этой строкой сказать?

Аналогично
Цитата Сообщение от Daniil Посмотреть сообщение
info circ2();
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
 void vvod1(int a)
  {
        switch(a)
        {
            case 1:
                circ1.rad=circ1.x=circ1.y=0;
                break;
            case 2:
            {
                float z;cin>>z;
                circ1.rad=z;
                circ1.x=circ1.y=0;
                break;
            }
            case 3:
            {
                float z;cin>>z;
                circ1.rad=z;
                float b;cin>>b;
                circ1.x=b;
                circ1.y=0;
                break;
            }
            case 4:
            {
                float z;cin>>z;
                circ1.rad=z;
                float b;cin>>b;
                circ1.x=b;
                float c;cin>>c;
                circ1.y=c;
                break;
            }
       } // конец switch
  }
И не забыть в info
C++
1
    friend class circ;
1
 Аватар для Martein
704 / 109 / 21
Регистрация: 22.06.2014
Сообщений: 241
08.03.2015, 12:38
А что конкретно вам хочется, чтобы происходило в этой строке?
cont(circi); - это что вообще такое?
0
1 / 1 / 0
Регистрация: 02.05.2014
Сообщений: 37
08.03.2015, 12:50  [ТС]
zss,
цирк1 объявлен как инфо в классе, с мейном он не связан. я в классе и теле могу одинаковые переменные создать, ничего страшного не произойдет.
на вход подается от 1 до 4 в зависимости от этого выполняется один из четырех конструкторов.
(info circ1() это конструктор по умолчанию.


Цитата Сообщение от Martein Посмотреть сообщение
А что конкретно вам хочется, чтобы происходило в этой строке?
cont(circi); - это что вообще такое?
мне хочется чтобы в контейнер сохранился объект, содержащий пару окружностей
Цитата Сообщение от zss Посмотреть сообщение
Сообщение от Daniil
cont(circi);
При объявлении надо указывать имя экземпляра.
Код C++
1
cont *cont1(circi);
Только какой в этом смысл? Вы нигде не используете этот экземпляр.
боюсь, что я вас не понял
0
Модератор
Эксперт С++
 Аватар для zss
13772 / 10965 / 6491
Регистрация: 18.12.2011
Сообщений: 29,242
08.03.2015, 12:58
Лучший ответ Сообщение было отмечено Daniil как решение

Решение

cont это имя типа (такое же, как и int, например).
Чтобы создать экземпляр надо его объявить
C++
1
cont cont1(circi);
Объявляете переменную cont1 типа cont и инициализируете ее используя
конструктор cont (circ &part)

Кстати первой строкой кода в конструкторе у Вас идет
if (doom!=true)
А doom еще ничего не присвоено!
1
1 / 1 / 0
Регистрация: 02.05.2014
Сообщений: 37
08.03.2015, 13:06  [ТС]
Цитата Сообщение от zss Посмотреть сообщение
cont это имя типа (такое же, как и int, например).
Чтобы создать экземпляр надо его объявить
Код C++
1
cont cont1(circi);
Объявляете переменную cont1 типа cont и инициализируете ее используя
конструктор cont (circ &part)
хахаха спасибо большое, такая глупая ошибка:-)

Цитата Сообщение от zss Посмотреть сообщение
Кстати первой строкой кода в конструкторе у Вас идет
if (doom!=true)
А doom еще ничего не присвоено!
если doom есть ничто, то оно не равно true.
0
Модератор
Эксперт С++
 Аватар для zss
13772 / 10965 / 6491
Регистрация: 18.12.2011
Сообщений: 29,242
08.03.2015, 13:09
Цитата Сообщение от Daniil Посмотреть сообщение
то оно не равно true
Кто это Вам сказал?
До тех пор, пока Вы явно не присвоили или непроинициализировали переменную,
в ней находится мусор (любое значение). В данном случае - любое из (true,false).
Кстати конструктор запускается всего один раз. Поэтому можете убрать if и
оставить код, который инициализирует ВСЕ переменные класса.
А остальное перенесите в какой-то другой метод, например обозванный как
C++
1
void Set();
Да и код контейнера Вы еще не дописали.
Пока что там нет ни одного метода, кроме этого конструктора.
1
1 / 1 / 0
Регистрация: 02.05.2014
Сообщений: 37
08.03.2015, 13:14  [ТС]
Цитата Сообщение от zss Посмотреть сообщение
Кто это Вам сказал?
мне казалось это логичным.
Цитата Сообщение от zss Посмотреть сообщение
До тех пор, пока Вы явно не присвоили или непроинициализировали переменную,
в ней находится мусор (любое значение). В данном случае - любое из (true,false)
спасибо, учту на будущее!
0
1 / 1 / 0
Регистрация: 02.05.2014
Сообщений: 37
11.03.2015, 07:43  [ТС]
Выяснилось что он запускается не один раз. дело в том, что при проверки на пересечение проверяется всегда две окружности, которые строятся из конструктора по умолчанию. и в объекте тоже записаны постоянно они, несмотря на то, что вход в vvod1 и 2 осуществляется и значения меняются, после выхода из метода вновь применяется конструктор по умолчанию, хотя и не прописан ни в одной строке после.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.03.2015, 07:43
Помогаю со студенческими работами здесь

Нет подходящего конструктора по умолчанию
#ifndef ANIMATION_H #define ANIMATION_H #include &lt;SFML\Graphics.hpp&gt; class animation { public: std::vector&lt;sf::IntRect&gt;...

Нет подходящего конструктора по умолчанию
Не могу взять в толк, почему ругается на отсутствие конструктора по умолчанию, ведь я их прописал в обеих классах #include...

Нет подходящего конструктора по умолчанию
написал вот такой код // ConsoleApplication29.cpp: определяет точку входа для консольного приложения. // #include...

Нет подходящего конструктора по умолчанию
Пишу таблицу(которая по факту является массивом), содержащую информацию о владельцах продаваемых квартир(class PurchaseData)....

Нет подходящего конструктора по умолчанию. Наследование
Скидываю хидер и исходник к нему: хидер(Main_Menu.h): #include &quot;stdafx.h&quot; #ifndef MAIN_MENU_DEF #define MAIN_MENU_DEF 1 ...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru