Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Insanus
0 / 0 / 0
Регистрация: 13.05.2014
Сообщений: 36
29.06.2014, 15:12     Нет подходящего конструктора по умолчанию. Наследование #1
Скидываю хидер и исходник к нему:
хидер(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()
{
 
}
Собственно... что я делаю не так?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.06.2014, 15:12     Нет подходящего конструктора по умолчанию. Наследование
Посмотрите здесь:

C2512: odejda: нет подходящего конструктора по умолчанию C++
Наследование с использованием конструктора. C++
C++ Visual жалуется на конструктор "Error C2512: нет подходящего конструктора по умолчанию"
C++ Инициализация конструктора по умолчанию
C++ Конструктор Шредингера "нет подходящего конструктора по умолчанию", хотя он есть
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Insanus
0 / 0 / 0
Регистрация: 13.05.2014
Сообщений: 36
29.06.2014, 15:22  [ТС]     Нет подходящего конструктора по умолчанию. Наследование #2
Собственно, ошибки по этому поводу:
Миниатюры
Нет подходящего конструктора по умолчанию. Наследование  
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
29.06.2014, 15:26     Нет подходящего конструктора по умолчанию. Наследование #3
Insanus, компилятор не будет за Вас преобразовывать параметры конструктора производного класса в параметры базового. Всё что он может - это подставить конструктор по умолчанию (без параметров). Но его у Вас нет, о чем он и сказал ошибкой.
Надо добавить явный вызов конструктора базового класса в конструктор производного.
Insanus
0 / 0 / 0
Регистрация: 13.05.2014
Сообщений: 36
29.06.2014, 15:30  [ТС]     Нет подходящего конструктора по умолчанию. Наследование #4
то есть должно быть так:

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);
}
?
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
29.06.2014, 15:35     Нет подходящего конструктора по умолчанию. Наследование #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Немного иначе:
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)
{
}
Insanus
0 / 0 / 0
Регистрация: 13.05.2014
Сообщений: 36
29.06.2014, 15:40  [ТС]     Нет подходящего конструктора по умолчанию. Наследование #6
Цитата Сообщение от 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)
{
}
Проблема в том, что так я тоже пытался.
Миниатюры
Нет подходящего конструктора по умолчанию. Наследование  
DrOffset
6424 / 3798 / 879
Регистрация: 30.01.2014
Сообщений: 6,591
29.06.2014, 15:46     Нет подходящего конструктора по умолчанию. Наследование #7
Insanus, ну так деструктор базового класса нужно определить
Insanus
0 / 0 / 0
Регистрация: 13.05.2014
Сообщений: 36
29.06.2014, 15:49  [ТС]     Нет подходящего конструктора по умолчанию. Наследование #8
ох я дурак
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
29.06.2014, 15:50     Нет подходящего конструктора по умолчанию. Наследование #9
Insanus, просто в Вашем коде проблема далеко не одна, а стало быть и решения для них разные будут.
Insanus
0 / 0 / 0
Регистрация: 13.05.2014
Сообщений: 36
29.06.2014, 15:51  [ТС]     Нет подходящего конструктора по умолчанию. Наследование #10
А какие ещё есть проблемы?
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
29.06.2014, 15:51     Нет подходящего конструктора по умолчанию. Наследование #11
12 строка любопытная. Параметры в виде "массивов". Да много чего.
Insanus
0 / 0 / 0
Регистрация: 13.05.2014
Сообщений: 36
29.06.2014, 15:56  [ТС]     Нет подходящего конструктора по умолчанию. Наследование #12
Цитата Сообщение от Tulosba Посмотреть сообщение
12 строка любопытная. Параметры в виде "массивов". Да много чего.
в 12 строке содержится размер текста, если я правильно помню

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

Добавлено через 51 секунду
а что ещё? Просто в командах я редко программировал, а хочется набраться опыта хоть откуда-то.
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
29.06.2014, 15:56     Нет подходящего конструктора по умолчанию. Наследование #13
Insanus, т.е. Вас даже подсветка на форуме не смутила? size_t и int это типы.
Для работы со строками хорошо бы освоить тип std::string например, а не псевдомассив вместо указателя на char.
Insanus
0 / 0 / 0
Регистрация: 13.05.2014
Сообщений: 36
29.06.2014, 15:58  [ТС]     Нет подходящего конструктора по умолчанию. Наследование #14
Цитата Сообщение от Tulosba Посмотреть сообщение
Insanus, т.е. Вас даже подсветка на форуме не смутила? size_t и int это типы.
странность в том, что у меня это никак не подсветилось в редакторе, а потому я преспокойно это использовал а здесь заметил, понял, что тип какой-то, но не придал особого значения.
Alex5
881 / 616 / 81
Регистрация: 12.04.2010
Сообщений: 1,552
29.06.2014, 21:44     Нет подходящего конструктора по умолчанию. Наследование #15
Цитата Сообщение от 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");
}
Миниатюры
Нет подходящего конструктора по умолчанию. Наследование  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.06.2014, 06:42     Нет подходящего конструктора по умолчанию. Наследование
Еще ссылки по теме:

Класс-шаблон создание конструктора по умолчанию C++
C++ Нет подходящего конструктора по умолчанию
C++ Создание лог файла. Нет подходящего конструктора по умолчанию

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

Или воспользуйтесь поиском по форуму:
Insanus
0 / 0 / 0
Регистрация: 13.05.2014
Сообщений: 36
30.06.2014, 06:42  [ТС]     Нет подходящего конструктора по умолчанию. Наследование #16
Я это понимаю, просто, если не надо добавлять текст на слой, я подаю нулевую ссылку, а если именем должен быть текст,я имя подаю как ноль стоит ли так делать?
Yandex
Объявления
30.06.2014, 06:42     Нет подходящего конструктора по умолчанию. Наследование
Ответ Создать тему
Опции темы

Текущее время: 23:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru