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

Ошибка при наследовании - C++

Восстановить пароль Регистрация
 
Виктор_Сен
 Аватар для Виктор_Сен
30 / 23 / 1
Регистрация: 01.08.2011
Сообщений: 176
08.10.2011, 15:37     Ошибка при наследовании #1
Привет! Ни как не могу разобраться, в чём дело. Создал 2 класса: Base и Derived, где Derived наследует Base. Но при компиляции возникает ошибка: "Error C2512: Base: нет подходящего конструктора по умолчанию d:\doc\dev\visual studio 2010\test\test\Derived.h 7 1 Test". Вот исходники:
Base.h:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#pragma once
class Base
{
public:
 
    Base(int a)
    {
    }
 
    virtual ~Base(void)
    {
    }
};
Derived.h:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#pragma once
#include "base.h"
class Derived:  public Base
{
public:
 
    Derived(void)
    {       
    }
 
    virtual ~Derived(void)
    {
    }
};
Test.cpp:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
// Test.cpp: главный файл проекта.
 
#include "stdafx.h"
#include "Derived.h"
 
using namespace System;
 
int main(array<System::String ^> ^args)
{   
    Derived a=Derived();
    Console::WriteLine(L"Здравствуй, мир!");
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.10.2011, 15:37     Ошибка при наследовании
Посмотрите здесь:

C++ Ошибка при наследовании
C++ Ошибка при наследовании
Ошибка в наследовании C++
C++ Ошибка при наследовании?
C++ Ошибка при наследовании класса
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
08.10.2011, 16:14     Ошибка при наследовании #2
У вас конструктор базового класса принимает 1 аргумент, а вы создаете объект без аргументов.
При создании объекта производного класса, сперва вызывается конструктор производного класса, затем конструктор базового класса. У базового класса есть только 1 конструктор и он принимает 1 аргумент.
Виктор_Сен
 Аватар для Виктор_Сен
30 / 23 / 1
Регистрация: 01.08.2011
Сообщений: 176
08.10.2011, 16:26  [ТС]     Ошибка при наследовании #3
Получается, чтобы использовать наследвание, нужно, чтобы у базового класса был конструктор без параметров. А можно ли как-нибудь передать параметры в конструктор базового класса? Просто я пробовал писать так:
C++
1
2
3
    Derived(int a)
    {       
    }
и
C++
1
Derived a=Derived(10);
, но это не помогло.
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
08.10.2011, 16:27     Ошибка при наследовании #4
Вот так:
C++
1
2
3
4
Derived(int a )
: Base( a ) // явно вызываем конструктор класса Base
{
}
Можно добавить конструктор по умолчанию в класс Base и тогда ошибки не будет.
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,512
08.10.2011, 16:29     Ошибка при наследовании #5
Дополню Chelioss:
Чтобы код работал нужно либо явно инициализировать Base из Derived(void)
C++
1
Derived(void):Base(0){}
Либо добавить к Base конструктор по умолчанию без параметров ну или ещё убрать существующий у Base коструктор (так как он всё равно ничего не делает) и компилятор сам создаст классу Base конструктор по умолчанию.
Yandex
Объявления
08.10.2011, 16:29     Ошибка при наследовании
Ответ Создать тему
Опции темы

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