Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.08.2016, 23:23   #1
User7991
 
Регистрация: 29.05.2016
Сообщений: 3
По умолчанию Наследование классов в раздельных файлах

Здравствуйте! Вопрос:

Реализовал .h и .cpp файлы для класса односвязного списка. Затем создал унаследованный от этого класса класс для двусвязного списка. Оба класса реализованы в отдельных файлах и при компиляции возникает ошибка. Кидаю код всех файлов.
list.h:
Код:
#ifndef LIST_H
#define LIST_H
 
 
class List
{
private:
    int my_value;
    List *my_next;
 
public:
    List(int value);
    void add_value(int value);
    void print();
    int get_length();
};
 
#endif
list.cpp:
Код:
#include <cstddef>
#include <iostream>
#include "list.h"
 
using namespace std;
 
 
List::List(int value)
{
    my_value = value;
    my_next = 0;
}
 
 
void List::add_value(int value)
{
    List *current = this;
 
    while(current->my_next != NULL)
        current = current->my_next;
 
    current->my_next = new List(value);
}
 
 
void List::print()
{
    for(List *current = this; current != NULL; current = current->my_next)
        cout << current->my_value << " ";
}
 
 
int List::get_length()
{
    int counter = 0;
 
    for(List *current = this; current != NULL; current = current->my_next)
        counter++;
 
    return counter;
}
double_list.h:
Код:
#ifndef DOUBLE_LIST_H
#define DOUBLE_LIST_H
#include "list.h"
 
 
class Double_list : public List
{
private:
    List *my_previous;
 
public:
    Double_list(int value);
    void add_value(int value);
};
 
#endif
double_list.cpp:
Код:
#include <cstddef>
#include "double_list.h"
 
 
Double_list::Double_list(int value) : List(value)
{
    my_previous = NULL;
}
 
 
void Double_list::add_value(int value)
{
    Double_list *current = this;
 
    while(current->my_next != NULL)
        current = current->my_next;
 
    current->my_next = new Double_list(value);
    current->my_next->my_previous = current;
}
main.cpp:
Код:
#include <iostream>
#include "list.h"
#include "double_list.h"
 
 
using namespace std;
 
 
 
int main()
{
    List l1(6);
    Double_list l(5);
}
Ошибок много, в основном ругается на то что переменная my_next приватная. Что не так? Компилирую g++ main.cpp list.cpp double_list.cpp
User7991 вне форума Ответить с цитированием
Старый 18.08.2016, 23:30   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Классы-наследники не имеют доступа к private данным родителя.
Воспользуйтесь protected: или перепешите классы так, чтоб не требовалась обращение к переменным напрямую (а через методы).
waleri вне форума Ответить с цитированием
Старый 19.08.2016, 00:28   #3
User7991
 
Регистрация: 29.05.2016
Сообщений: 3
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Классы-наследники не имеют доступа к private данным родителя.
Воспользуйтесь protected: или перепешите классы так, чтоб не требовалась обращение к переменным напрямую (а через методы).
Исправил, но теперь такие ошибки:
Изображения
Тип файла: jpg Снимок.JPG (25.5 Кб, 175 просмотров)
User7991 вне форума Ответить с цитированием
Старый 19.08.2016, 00:38   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

my_previous имеет тип лист, а вы работаете с ней как с Double_List
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Наследование классов krasy Помощь студентам 0 24.04.2016 16:03
Наследование Классов _Goodwin Помощь студентам 1 09.01.2013 10:52
Наследование классов (С++) MayhemWithMercy Помощь студентам 4 01.10.2012 12:08
наследование классов Ioane Помощь студентам 0 14.04.2012 16:00
наследование классов Dimarik Общие вопросы C/C++ 15 02.07.2009 20:00