С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Lynatik001
38 / 32 / 4
Регистрация: 28.09.2012
Сообщений: 620
#1

Беда с наследованием. Организация многофайлового приложения - C++

10.05.2014, 21:11. Просмотров 311. Ответов 6
Метки нет (Все метки)

Вот написал такое вот чудо, работает если за коментировать любой из #include "kvadrat.h" #include "kolo.h" и соотвецтвенно их исполнения. Тоесть по отдельности все работает. А вот когда оба инклюдю идут куча ошибок. Думаю из за того что тут инклюдятся оба раза функции с основного класса или в чем проблема не пойму(
Может кто объяснить?
Вот код
l2.1.11.c++.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include "stdafx.h"
#include "kvadrat.h"
#include "kolo.h"
int _tmain(int argc, _TCHAR* argv[])
{
    figure *kvad = new kvadrat(1,2,3,4);
    kvad->plosha();
    kvad->perimeter();
 
    figure *kol = new kolo(1,2,3,4);
    kol->plosha();
    kol->perimeter();
    return 0;
}

figure.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include "stdafx.h"
#include <string>
#include <iostream>
#include <math.h>
using namespace std;
class figure{
public:
         double x1;
         double x2;
         double y1;
         double y2;
         figure(double x1, double x2, double y1, double y2);
         figure();
         double doljina();
         virtual double plosha();
         virtual double perimeter();
};
figure.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
#include "stdafx.h"
#include "figure.h"
         figure::figure(double x1, double x2, double y1, double y2)
        {
            this->x1 = x1;
            this->x2 = x1;
            this->y1 = y1;
            this->y2 = y2;
        }
         figure::figure()
        {
 
        }
         double figure::doljina()
        {
             return sqrt((pow(x1 - x2, 2) + pow(y1 - y2, 2)));
        }
         double figure::plosha(){
             cout << "pustota" << endl;
             return 0;
         }
         double figure::perimeter(){
             cout << "pustota" << endl;
             return 0;
         }
kvadrat.h
C++
1
2
3
4
5
6
7
8
#include "figure.h"
 
class kvadrat : public figure {
public:
         kvadrat(double x1, double x2, double y1, double y2) ;
         double plosha();
         double perimeter();
    };
kvadrat.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "stdafx.h"
#include "kvadrat.h"
        kvadrat::kvadrat(double x1, double x2, double y1, double y2) 
        {
            this->x1 = x1;
            this->x2 = x2;
            this->y1 = y1;
            this->y2 = y2;
        }
         double kvadrat::plosha()
        {
            double pl = pow(doljina(),2);
            cout << endl << "plosha  kvadrata = " << pl << endl;
            return pl;
        }
         double kvadrat::perimeter()
        {
            double dol = doljina() + doljina() + doljina() + doljina();
            cout << endl << "perimeter  kvadrata = " << dol << endl;
            return dol;
        }
kolo.h
C++
1
2
3
4
5
6
7
8
#include "figure.h"
class kolo : public figure{
public:
         kolo(double x1, double x2, double y1, double y2) ;
         double plosha();
         double perimeter();
         double radius();
};
kolo.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
#include "stdafx.h"
#include "kolo.h"
        kolo::kolo(double x1, double x2, double y1, double y2) 
        {
            this->x1 = x1;
            this->x2 = x2;
            this->y1 = y1;
            this->y2 = y2;
        }
        double kolo::radius()
        {
            return 2/(x2-x1);
        }
         double kolo::plosha()
        {
            double pl = 3.14 * pow(radius(),2);
            cout << endl << "plosha  kola = " << pl << endl;
            return pl;
        }
         double kolo::perimeter()
        {
            double per = 2 * 3.14 * radius();
            cout << endl << "perimeter  kola = " << per << endl;
            return per;
        }
вот ошибки на всякий
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
1>c:\users\yura\desktop\proekts\l2.1.11.c++\l2.1.11.c++\figure.h(6): error C2011: 'figure' : 'class' type redefinition
1>          c:\users\yura\desktop\proekts\l2.1.11.c++\l2.1.11.c++\figure.h(6) : see declaration of 'figure'
1>c:\users\yura\desktop\proekts\l2.1.11.c++\l2.1.11.c++\kolo.h(2): error C2504: 'figure' : base class undefined
1>c:\users\yura\desktop\proekts\l2.1.11.c++\l2.1.11.c++\l2.1.11.c++.cpp(10): error C2027: use of undefined type 'figure'
1>          c:\users\yura\desktop\proekts\l2.1.11.c++\l2.1.11.c++\figure.h(6) : see declaration of 'figure'
1>c:\users\yura\desktop\proekts\l2.1.11.c++\l2.1.11.c++\l2.1.11.c++.cpp(10): error C2227: left of '->plosha' must point to class/struct/union/generic type
1>c:\users\yura\desktop\proekts\l2.1.11.c++\l2.1.11.c++\l2.1.11.c++.cpp(11): error C2027: use of undefined type 'figure'
1>          c:\users\yura\desktop\proekts\l2.1.11.c++\l2.1.11.c++\figure.h(6) : see declaration of 'figure'
1>c:\users\yura\desktop\proekts\l2.1.11.c++\l2.1.11.c++\l2.1.11.c++.cpp(11): error C2227: left of '->perimeter' must point to class/struct/union/generic type
1>c:\users\yura\desktop\proekts\l2.1.11.c++\l2.1.11.c++\l2.1.11.c++.cpp(13): error C2440: 'initializing' : cannot convert from 'kolo *' to 'figure *'
1>          Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
1>c:\users\yura\desktop\proekts\l2.1.11.c++\l2.1.11.c++\l2.1.11.c++.cpp(14): error C2027: use of undefined type 'figure'
1>          c:\users\yura\desktop\proekts\l2.1.11.c++\l2.1.11.c++\figure.h(6) : see declaration of 'figure'
1>c:\users\yura\desktop\proekts\l2.1.11.c++\l2.1.11.c++\l2.1.11.c++.cpp(14): error C2227: left of '->plosha' must point to class/struct/union/generic type
1>c:\users\yura\desktop\proekts\l2.1.11.c++\l2.1.11.c++\l2.1.11.c++.cpp(15): error C2027: use of undefined type 'figure'
1>          c:\users\yura\desktop\proekts\l2.1.11.c++\l2.1.11.c++\figure.h(6) : see declaration of 'figure'
1>c:\users\yura\desktop\proekts\l2.1.11.c++\l2.1.11.c++\l2.1.11.c++.cpp(15): error C2227: left of '->perimeter' must point to class/struct/union/generic type
1>
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.05.2014, 21:11
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Беда с наследованием. Организация многофайлового приложения (C++):

Сборка многофайлового приложения: ошибка LNK2005 - C++
Привет! Помогите пожалуйста разобраться со организацией исходников. Структура такова: ColorButton.h в нем подключается Object.h и...

Работа многофайлового проекта - C++
С++ позволяет создавать многофайловые проект. Это повышает производительность, так как программа стает модульной и ее легко изменить и тд....

Создание многофайлового проекта в Borland 5.02 - C++
Кто знает как создать многофайловый проект в среде Borland 5.02

Сложности с построением многофайлового решения - C++
Есть 3-и класса. Каждый в файле. Не смотрите что реализация в h-ке, это просто чтобы было проще и удобнее понимать. Ошибка построения в...

Компиляция и сборка многофайлового проекта - C++
Допустим, у меня есть такие файлы. SuperClass h - объявление, SuperClass cpp - реализация SubClass h - объявление, SubClass cpp -...

Ошибка при компиляции многофайлового проекта - C++
Добрый вечер. Возникает ошибка при компиляции проекта, состоящего из 3-х файлов. В программе использованы структуры и списки. Файл...

6
zss
Модератор
Эксперт С++
6580 / 6142 / 2024
Регистрация: 18.12.2011
Сообщений: 16,009
Завершенные тесты: 1
10.05.2014, 21:26 #2
уберите #include "figure.h"
из заголовочных файлов и вставьте эту строку в cpp файлы.
0
Lynatik001
38 / 32 / 4
Регистрация: 28.09.2012
Сообщений: 620
10.05.2014, 21:37  [ТС] #3
Цитата Сообщение от zss Посмотреть сообщение
уберите #include "figure.h"
из заголовочных файлов и вставьте эту строку в 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
1>c:\users\yura\desktop\proekts\l2.1.11.c++\l2.1.11.c++\kvadrat.h(3): error C2504: 'figure' : base class undefined
1>c:\users\yura\desktop\proekts\l2.1.11.c++\l2.1.11.c++\kolo.h(2): error C2504: 'figure' : base class undefined
1>c:\users\yura\desktop\proekts\l2.1.11.c++\l2.1.11.c++\l2.1.11.c++.cpp(6): error C2065: 'figure' : undeclared identifier
1>c:\users\yura\desktop\proekts\l2.1.11.c++\l2.1.11.c++\l2.1.11.c++.cpp(6): error C2065: 'kvad' : undeclared identifier
1>c:\users\yura\desktop\proekts\l2.1.11.c++\l2.1.11.c++\l2.1.11.c++.cpp(7): error C2065: 'kvad' : undeclared identifier
1>c:\users\yura\desktop\proekts\l2.1.11.c++\l2.1.11.c++\l2.1.11.c++.cpp(7): error C2227: left of '->plosha' must point to class/struct/union/generic type
1>          type is ''unknown-type''
1>c:\users\yura\desktop\proekts\l2.1.11.c++\l2.1.11.c++\l2.1.11.c++.cpp(8): error C2065: 'kvad' : undeclared identifier
1>c:\users\yura\desktop\proekts\l2.1.11.c++\l2.1.11.c++\l2.1.11.c++.cpp(8): error C2227: left of '->perimeter' must point to class/struct/union/generic type
1>          type is ''unknown-type''
1>c:\users\yura\desktop\proekts\l2.1.11.c++\l2.1.11.c++\l2.1.11.c++.cpp(10): error C2065: 'figure' : undeclared identifier
1>c:\users\yura\desktop\proekts\l2.1.11.c++\l2.1.11.c++\l2.1.11.c++.cpp(10): error C2065: 'kol' : undeclared identifier
1>c:\users\yura\desktop\proekts\l2.1.11.c++\l2.1.11.c++\l2.1.11.c++.cpp(11): error C2065: 'kol' : undeclared identifier
1>c:\users\yura\desktop\proekts\l2.1.11.c++\l2.1.11.c++\l2.1.11.c++.cpp(11): error C2227: left of '->plosha' must point to class/struct/union/generic type
1>          type is ''unknown-type''
1>c:\users\yura\desktop\proekts\l2.1.11.c++\l2.1.11.c++\l2.1.11.c++.cpp(12): error C2065: 'kol' : undeclared identifier
1>c:\users\yura\desktop\proekts\l2.1.11.c++\l2.1.11.c++\l2.1.11.c++.cpp(12): error C2227: left of '->perimeter' must point to class/struct/union/generic type
1>          type is ''unknown-type''
1>  kvadrat.cpp
1>c:\users\yura\desktop\proekts\l2.1.11.c++\l2.1.11.c++\kvadrat.h(3): error C2504: 'figure' : base class undefined
1>c:\users\yura\desktop\proekts\l2.1.11.c++\l2.1.11.c++\kvadrat.cpp(6): error C2039: 'x1' : is not a member of 'kvadrat'
1>          c:\users\yura\desktop\proekts\l2.1.11.c++\l2.1.11.c++\kvadrat.h(3) : see declaration of 'kvadrat'
1>c:\users\yura\desktop\proekts\l2.1.11.c++\l2.1.11.c++\kvadrat.cpp(7): error C2039: 'x2' : is not a member of 'kvadrat'
1>          c:\users\yura\desktop\proekts\l2.1.11.c++\l2.1.11.c++\kvadrat.h(3) : see declaration of 'kvadrat'
1>c:\users\yura\desktop\proekts\l2.1.11.c++\l2.1.11.c++\kvadrat.cpp(8): error C2039: 'y1' : is not a member of 'kvadrat'
1>          c:\users\yura\desktop\proekts\l2.1.11.c++\l2.1.11.c++\kvadrat.h(3) : see declaration of 'kvadrat'
1>c:\users\yura\desktop\proekts\l2.1.11.c++\l2.1.11.c++\kvadrat.cpp(9): error C2039: 'y2' : is not a member of 'kvadrat'
1>          c:\users\yura\desktop\proekts\l2.1.11.c++\l2.1.11.c++\kvadrat.h(3) : see declaration of 'kvadrat'
1>c:\users\yura\desktop\proekts\l2.1.11.c++\l2.1.11.c++\kvadrat.cpp(13): error C3861: 'doljina': identifier not found
1>c:\users\yura\desktop\proekts\l2.1.11.c++\l2.1.11.c++\kvadrat.cpp(19): error C3861: 'doljina': identifier not found
1>  kolo.cpp
1>c:\users\yura\desktop\proekts\l2.1.11.c++\l2.1.11.c++\kolo.h(2): error C2504: 'figure' : base class undefined
1>c:\users\yura\desktop\proekts\l2.1.11.c++\l2.1.11.c++\kolo.cpp(6): error C2039: 'x1' : is not a member of 'kolo'
1>          c:\users\yura\desktop\proekts\l2.1.11.c++\l2.1.11.c++\kolo.h(2) : see declaration of 'kolo'
1>c:\users\yura\desktop\proekts\l2.1.11.c++\l2.1.11.c++\kolo.cpp(7): error C2039: 'x2' : is not a member of 'kolo'
1>          c:\users\yura\desktop\proekts\l2.1.11.c++\l2.1.11.c++\kolo.h(2) : see declaration of 'kolo'
1>c:\users\yura\desktop\proekts\l2.1.11.c++\l2.1.11.c++\kolo.cpp(8): error C2039: 'y1' : is not a member of 'kolo'
1>          c:\users\yura\desktop\proekts\l2.1.11.c++\l2.1.11.c++\kolo.h(2) : see declaration of 'kolo'
1>c:\users\yura\desktop\proekts\l2.1.11.c++\l2.1.11.c++\kolo.cpp(9): error C2039: 'y2' : is not a member of 'kolo'
1>          c:\users\yura\desktop\proekts\l2.1.11.c++\l2.1.11.c++\kolo.h(2) : see declaration of 'kolo'
1>c:\users\yura\desktop\proekts\l2.1.11.c++\l2.1.11.c++\kolo.cpp(13): error C2065: 'x2' : undeclared identifier
1>c:\users\yura\desktop\proekts\l2.1.11.c++\l2.1.11.c++\kolo.cpp(13): error C2065: 'x1' : undeclared identifier
думаю это действие нечего не меняет
0
KaDima281
5 / 5 / 2
Регистрация: 14.12.2013
Сообщений: 117
10.05.2014, 21:39 #4
А вы пробовали менять " на < ? Вдруг чудо произойдет?
0
ValeryS
Модератор
6729 / 5138 / 485
Регистрация: 14.02.2011
Сообщений: 17,246
10.05.2014, 21:48 #5
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
прочитай вот эту статью
http://ru.wikipedia.org/wiki/Pragma_once
и эту
http://ru.wikipedia.org/wiki/Include_guard
в код не вникал, но по моему у тебя этот случай

Добавлено через 1 минуту
Цитата Сообщение от Lynatik001 Посмотреть сообщение
#include "stdafx.h"
почему он у тебя в двух файлах приинклюден?
1
Melg
538 / 159 / 64
Регистрация: 23.09.2013
Сообщений: 314
10.05.2014, 21:49 #6
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
При первом просмотре у меня создаётся впечатление, что вы забыли использовать include guard технику препроцессора, как например :

C++
1
2
3
4
5
6
#ifndef FIGURE_H
#define FIGURE_H
class figure {
// ... 
};
#endif // FIGURE_H
или непереносимую директиву

C++
1
2
3
4
#pragma once
class figure {
// ... 
};
Дополнительная информация на этот счет по ссылке: http://ru.wikipedia.org/wiki/Pragma_once
1
Lynatik001
38 / 32 / 4
Регистрация: 28.09.2012
Сообщений: 620
10.05.2014, 21:57  [ТС] #7
Спасибо Решил с помощи
C++
1
#pragma once
0
10.05.2014, 21:57
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.05.2014, 21:57
Привет! Вот еще темы с ответами:

Как разобраться со сборкой многофайлового проекта - C++
В теории я считал что понимаю как происходят подключения файлов, их сборка (те работа линковщика, компоновщика...) Но вот на практике это...

Компиляция многофайлового проекта: Unexpected end of file while looking for precompiled header - C++
Здравствуйте! Почему когда компилирую такой проект: testHeader.h #ifndef _TEST_HEADER_H_ #define _TEST_HEADER_H_ int...

Непонятки с наследованием - C++
Будьте добры, проясните пожалуйста такой момент: Есть код: #include &lt;iostream&gt; using namespace std; class Counter { ...

Проблема с наследованием - C++
Здравствуйте, уважаемые Все! Столкнулся со следующей проблемой. Необходимо реализовать паттерн программирования &quot;Фабричный метод&quot;....


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

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

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