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

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

29.06.2014, 15:12. Показов 1689. Ответов 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)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.06.2014, 15:12
Ответы с готовыми решениями:

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

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

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

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

15
0 / 0 / 0
Регистрация: 13.05.2014
Сообщений: 36
29.06.2014, 15:22  [ТС] 2
Собственно, ошибки по этому поводу:
0
Миниатюры
Нет подходящего конструктора по умолчанию. Наследование  
:)
Эксперт С++
4769 / 3263 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
29.06.2014, 15:26 3
Insanus, компилятор не будет за Вас преобразовывать параметры конструктора производного класса в параметры базового. Всё что он может - это подставить конструктор по умолчанию (без параметров). Но его у Вас нет, о чем он и сказал ошибкой.
Надо добавить явный вызов конструктора базового класса в конструктор производного.
0
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);
}
?
0
:)
Эксперт С++
4769 / 3263 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
29.06.2014, 15:35 5
Лучший ответ Сообщение было отмечено 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  [ТС] 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)
{
}
Проблема в том, что так я тоже пытался.
0
Миниатюры
Нет подходящего конструктора по умолчанию. Наследование  
15141 / 8134 / 1966
Регистрация: 30.01.2014
Сообщений: 13,835
29.06.2014, 15:46 7
Insanus, ну так деструктор базового класса нужно определить
1
0 / 0 / 0
Регистрация: 13.05.2014
Сообщений: 36
29.06.2014, 15:49  [ТС] 8
ох я дурак
0
:)
Эксперт С++
4769 / 3263 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
29.06.2014, 15:50 9
Insanus, просто в Вашем коде проблема далеко не одна, а стало быть и решения для них разные будут.
0
0 / 0 / 0
Регистрация: 13.05.2014
Сообщений: 36
29.06.2014, 15:51  [ТС] 10
А какие ещё есть проблемы?
0
:)
Эксперт С++
4769 / 3263 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
29.06.2014, 15:51 11
12 строка любопытная. Параметры в виде "массивов". Да много чего.
0
0 / 0 / 0
Регистрация: 13.05.2014
Сообщений: 36
29.06.2014, 15:56  [ТС] 12
Цитата Сообщение от Tulosba Посмотреть сообщение
12 строка любопытная. Параметры в виде "массивов". Да много чего.
в 12 строке содержится размер текста, если я правильно помню

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

Добавлено через 51 секунду
а что ещё? Просто в командах я редко программировал, а хочется набраться опыта хоть откуда-то.
0
:)
Эксперт С++
4769 / 3263 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
29.06.2014, 15:56 13
Insanus, т.е. Вас даже подсветка на форуме не смутила? size_t и int это типы.
Для работы со строками хорошо бы освоить тип std::string например, а не псевдомассив вместо указателя на char.
0
0 / 0 / 0
Регистрация: 13.05.2014
Сообщений: 36
29.06.2014, 15:58  [ТС] 14
Цитата Сообщение от Tulosba Посмотреть сообщение
Insanus, т.е. Вас даже подсветка на форуме не смутила? size_t и int это типы.
странность в том, что у меня это никак не подсветилось в редакторе, а потому я преспокойно это использовал а здесь заметил, понял, что тип какой-то, но не придал особого значения.
0
1128 / 787 / 232
Регистрация: 12.04.2010
Сообщений: 2,012
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");
}
0
Миниатюры
Нет подходящего конструктора по умолчанию. Наследование  
0 / 0 / 0
Регистрация: 13.05.2014
Сообщений: 36
30.06.2014, 06:42  [ТС] 16
Я это понимаю, просто, если не надо добавлять текст на слой, я подаю нулевую ссылку, а если именем должен быть текст,я имя подаю как ноль стоит ли так делать?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.06.2014, 06:42

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

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

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

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

ошибка нет подходящего конструктора по умолчанию, но мне на самом деле нужна пустая переменная
Проблема в main.cpp строка 15, мне нужна пустая переменная. До того как я добавил строки 25-27 из...

Конструктор Шредингера "нет подходящего конструктора по умолчанию", хотя он есть
собственно, код. на 156-й строке ( cont(circi);) ругается на отсутствие конструктора в классе. но...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.