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

Нет подходящего конструктора по умолчанию. Наследование

29.06.2014, 15:12. Показов 2847. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Скидываю хидер и исходник к нему:
хидер(Main_Menu.h):
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
#include "stdafx.h"
 
#ifndef MAIN_MENU_DEF
#define MAIN_MENU_DEF 1
 
#include "BaseClasses.h"
 
class Main_menu_obj:public ClassParent
{
    protected:
        SDL_Rect rect;
        int size_t;
        SDL_Surface *surf;
        TTF_Font *fnt;
        SDL_Texture *texture;
        bool activity_element;
        void redact_obj(int r, int g, int b);
    public:
        Main_menu_obj(int xB, int yB, int widthB, int heightB, int size_tB, char file[256], char font[256], char text[256], char name[256], SDL_Renderer *render);
        virtual ~Main_menu_obj();
        virtual char* Rendering(int diffX, int diffY, int diffW, int diffH, SDL_Renderer *render);
        virtual char* Event(int diffX, int diffY, SDL_Event *event);
};
 
class Options_menu_obj :public Main_menu_obj
{
    public:
        Options_menu_obj(int xB, int yB, int widthB, int heightB, int size_tB, char file[256], char font[256], char text[256], char name[256], SDL_Renderer *render);
        ~Options_menu_obj();
};
 
#endif
исходник к нему(Main_Menu.cpp):
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
#include "stdafx.h"
#include "Main_Menu.h"
 
Main_menu_obj::Main_menu_obj(int xB, int yB, int widthB, int heightB, int size_tB, char file[256], char font[256], char text[256], char name[256], SDL_Renderer *render):ClassParent()
{
    strcpy(Status, "Calm");
    if (name != 0)
        strcpy(Name, name);
    else
        if (text != 0)
            strcpy(Name, text);
        else
            strcpy(Name, "Menu_Object");
    activity = activity_element = true;
    rect.x = xB;
    rect.y = yB;
    rect.w = widthB;
    rect.h = heightB;
    if (size_tB>=0)
        size_t = size_tB;
    else
        size_t = rect.h - (float)rect.h/10;
    if (file != 0)
    {
        surf = Sprite::load(file);
        Sprite::Transparent(surf, 255, 255, 255);
        texture = SDL_CreateTextureFromSurface(render, surf);
    }
    else
    {
        surf = 0;
        texture = 0;
    }
    surf = SDL_CreateRGBSurface(0, rect.w, rect.h, 32, 0, 0, 0, 255);
    Sprite::Transparent(surf, 0, 0, 0);
    if ((font != 0) && (text != 0))
        Sprite::printText(surf, (float)rect.w/20+1, (float)(rect.h - size_t)/2, text, size_t, font, 10, 10, 10, render);
}
 
void Main_menu_obj::redact_obj(int r, int g, int b)
{
    if ((r < 0) || (g < 0) || (b < 0) || (r > 255) || (g > 255) || (b > 255))
        return;
}
 
char* Main_menu_obj::Rendering(int diffX, int diffY, int diffW, int diffH, SDL_Renderer *render)
{
    if (activity)
    {
        rect.x += diffX;
        rect.y += diffY;
        int bufW = rect.w, bufH = rect.h;
        if (diffW>0)
            rect.w = diffW;
        if (diffH>0)
            rect.h = diffH;
        if ((texture != 0) && (activity_element))
            SDL_RenderCopy(render, texture, 0, &rect);
        SDL_RenderCopy(render, SDL_CreateTextureFromSurface(render, surf), 0, &rect);
        rect.w = bufW;
        rect.h = bufH;
        rect.x -= diffX;
        rect.y -= diffY;
    }
    return "NULL";
}
 
char* Main_menu_obj::Event(int diffX, int diffY, SDL_Event *event)
{
    if (activity)
    {
        int x, y;
        SDL_GetMouseState(&x, &y);
        x += diffX;
        y += diffY;
        if (strcmp(Name, "BC") != 0)
            if ((rect.x<x)&&(rect.x+rect.w>x)&&(rect.y<y)&&(rect.y+rect.h>y))
                activity_element = true;
            else
                activity_element = false;
        else
            activity_element = true;
        switch(event->type)
        {
            case SDL_MOUSEBUTTONDOWN:
                if (event->button.button == SDL_BUTTON_LEFT)
                    return Name;
            break;
        }
    }
    return "NULL";
}
 
Options_menu_obj::Options_menu_obj(int xB, int yB, int widthB, int heightB, int size_tB, char file[256], char font[256], char text[256], char name[256], SDL_Renderer *render)
{//Сюда указывает компилятор с таким комментарием->main_menu.cpp(95): error C2512: Main_menu_obj: нет подходящего конструктора по умолчанию
 
}
 
Options_menu_obj::~Options_menu_obj()
{
 
}
Собственно... что я делаю не так?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.06.2014, 15:12
Ответы с готовыми решениями:

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

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

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

15
0 / 0 / 0
Регистрация: 13.05.2014
Сообщений: 36
29.06.2014, 15:22  [ТС]
Собственно, ошибки по этому поводу:
Миниатюры
Нет подходящего конструктора по умолчанию. Наследование  
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
29.06.2014, 15:26
Insanus, компилятор не будет за Вас преобразовывать параметры конструктора производного класса в параметры базового. Всё что он может - это подставить конструктор по умолчанию (без параметров). Но его у Вас нет, о чем он и сказал ошибкой.
Надо добавить явный вызов конструктора базового класса в конструктор производного.
0
0 / 0 / 0
Регистрация: 13.05.2014
Сообщений: 36
29.06.2014, 15:30  [ТС]
то есть должно быть так:

C++
1
2
3
4
Options_menu_obj::Options_menu_obj(int xB, int yB, int widthB, int heightB, int size_tB, char file[256], char font[256], char text[256], char name[256], SDL_Renderer *render)
{
 Main_menu_obj(xB, yB, widthB, heightB, size_tB, file, font, text, name, render);
}
?
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
29.06.2014, 15:35
Лучший ответ Сообщение было отмечено Insanus как решение

Решение

Немного иначе:
C++
1
2
3
4
Options_menu_obj::Options_menu_obj(int xB, int yB, int widthB, int heightB, int size_tB, char file[256], char font[256], char text[256], char name[256], SDL_Renderer *render)
: Main_menu_obj(xB, yB, widthB, heightB, size_tB, file, font, text, name, render)
{
}
0
0 / 0 / 0
Регистрация: 13.05.2014
Сообщений: 36
29.06.2014, 15:40  [ТС]
Цитата Сообщение от Tulosba Посмотреть сообщение
Немного иначе:
C++
1
2
3
4
Options_menu_obj::Options_menu_obj(int xB, int yB, int widthB, int heightB, int size_tB, char file[256], char font[256], char text[256], char name[256], SDL_Renderer *render)
: Main_menu_obj(xB, yB, widthB, heightB, size_tB, file, font, text, name, render)
{
}
Проблема в том, что так я тоже пытался.
Миниатюры
Нет подходящего конструктора по умолчанию. Наследование  
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
29.06.2014, 15:46
Insanus, ну так деструктор базового класса нужно определить
1
0 / 0 / 0
Регистрация: 13.05.2014
Сообщений: 36
29.06.2014, 15:49  [ТС]
ох я дурак
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
29.06.2014, 15:50
Insanus, просто в Вашем коде проблема далеко не одна, а стало быть и решения для них разные будут.
0
0 / 0 / 0
Регистрация: 13.05.2014
Сообщений: 36
29.06.2014, 15:51  [ТС]
А какие ещё есть проблемы?
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
29.06.2014, 15:51
12 строка любопытная. Параметры в виде "массивов". Да много чего.
0
0 / 0 / 0
Регистрация: 13.05.2014
Сообщений: 36
29.06.2014, 15:56  [ТС]
Цитата Сообщение от Tulosba Посмотреть сообщение
12 строка любопытная. Параметры в виде "массивов". Да много чего.
в 12 строке содержится размер текста, если я правильно помню

Добавлено через 1 минуту
Цитата Сообщение от Tulosba Посмотреть сообщение
12 строка любопытная. Параметры в виде "массивов". Да много чего.
Параметры в виде массивов меня просто больше привлекают, чем char * и прочие подобные, не думаю, что в рамках моего маленького проектика енто критично^^'

Добавлено через 51 секунду
а что ещё? Просто в командах я редко программировал, а хочется набраться опыта хоть откуда-то.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
29.06.2014, 15:56
Insanus, т.е. Вас даже подсветка на форуме не смутила? size_t и int это типы.
Для работы со строками хорошо бы освоить тип std::string например, а не псевдомассив вместо указателя на char.
0
0 / 0 / 0
Регистрация: 13.05.2014
Сообщений: 36
29.06.2014, 15:58  [ТС]
Цитата Сообщение от Tulosba Посмотреть сообщение
Insanus, т.е. Вас даже подсветка на форуме не смутила? size_t и int это типы.
странность в том, что у меня это никак не подсветилось в редакторе, а потому я преспокойно это использовал а здесь заметил, понял, что тип какой-то, но не придал особого значения.
0
1130 / 789 / 232
Регистрация: 12.04.2010
Сообщений: 2,012
29.06.2014, 21:44
Цитата Сообщение от Insanus Посмотреть сообщение
C++
1
2
if (name != 0)
 strcpy(Name, name);
Для массива, состоящего из одних нулей name!=0. Потому что, name == &name[0] (т.е. name - это адрес массива).

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
#include <iostream>
 
int f( char name[256] )
{
    if( name != 0 ) 
        std::cout << "\n  name != 0      ";
 
    if( name == 0 ) 
        std::cout << "\n  name == 0      ";
 
    //std::cout << "    name == " << (int)name;
 
    if( name )
    {
        //std::cout << "    &name[0] == " << (int)&name[0];
        std::cout << "  name: \"" << name << "\"      ";
        for( int i = 0; i< 8; ++i )
            std::cout << "  " << (int)name[i];
        std::cout << "...         ";
    }
    std::cout << std::endl;
 
    return 0;
}
 
int main()
{
    char a[256] = { 0 };
    f( a );
    f("");
    f("abc");
    f( 0 ); // только в этом случае будет  name == 0 
 
    std::cout << "\n\n";
    system("pause");
}
Миниатюры
Нет подходящего конструктора по умолчанию. Наследование  
0
0 / 0 / 0
Регистрация: 13.05.2014
Сообщений: 36
30.06.2014, 06:42  [ТС]
Я это понимаю, просто, если не надо добавлять текст на слой, я подаю нулевую ссылку, а если именем должен быть текст,я имя подаю как ноль стоит ли так делать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.06.2014, 06:42
Помогаю со студенческими работами здесь

Нет подходящего конструктора vector по умолчанию
Не понимаю, как описать #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;vector&gt; using namespace std; class Money { ...

Ошибка: нет подходящего конструктора по умолчанию
В общем ребят, такая проблема, решил начать обучение плюсов по книжке, там задание создать класс и конструктор с параметром, и в общем суть...

C2512: odejda: нет подходящего конструктора по умолчанию
Пытаюсь разобраться с полиморфизмом. Помогите пожалуйтста. #include &lt;string&gt; #include &lt;iostream&gt; using namespace std; ...

Создание лог файла. Нет подходящего конструктора по умолчанию
Добрый день, почему вылетает ошибка не пойму. Ошибка: нет подходящего конструктора по умолчанию. И вторая ошибка Log::Log(void):...

Не удаётся добавить в вектор объектов экземпляры класса (нет подходящего конструктора по умолчанию)
Здравствуйте! Столкнулся со следующей проблемой. Мне нужно создать вектор, который содержит объекты класса. Класс имеет 4 поля. В...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs . . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru