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

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

Восстановить пароль Регистрация
 
Lynatik001
 Аватар для Lynatik001
34 / 28 / 2
Регистрация: 28.09.2012
Сообщений: 560
10.05.2014, 21:11     Беда с наследованием. Организация многофайлового приложения #1
Вот написал такое вот чудо, работает если за коментировать любой из #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>
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.05.2014, 21:11     Беда с наследованием. Организация многофайлового приложения
Посмотрите здесь:

Непонятки с наследованием C++
C++ Проблемы с наследованием
C++ создание многофайлового проекта в Borland 5.02
C++ Проблема с наследованием
C++ Сложности с построением многофайлового решения
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5943 / 5548 / 1783
Регистрация: 18.12.2011
Сообщений: 14,170
Завершенные тесты: 1
10.05.2014, 21:26     Беда с наследованием. Организация многофайлового приложения #2
уберите #include "figure.h"
из заголовочных файлов и вставьте эту строку в cpp файлы.
Lynatik001
 Аватар для Lynatik001
34 / 28 / 2
Регистрация: 28.09.2012
Сообщений: 560
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
думаю это действие нечего не меняет
KaDima281
5 / 5 / 2
Регистрация: 14.12.2013
Сообщений: 117
10.05.2014, 21:39     Беда с наследованием. Организация многофайлового приложения #4
А вы пробовали менять " на < ? Вдруг чудо произойдет?
ValeryS
Модератор
6376 / 4842 / 443
Регистрация: 14.02.2011
Сообщений: 16,045
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"
почему он у тебя в двух файлах приинклюден?
Melg
416 / 152 / 62
Регистрация: 23.09.2013
Сообщений: 306
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.05.2014, 21:57     Беда с наследованием. Организация многофайлового приложения
Еще ссылки по теме:

Сборка многофайлового приложения: ошибка LNK2005 C++
Работа многофайлового проекта C++
Компиляция и сборка многофайлового проекта C++

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

Или воспользуйтесь поиском по форуму:
Lynatik001
 Аватар для Lynatik001
34 / 28 / 2
Регистрация: 28.09.2012
Сообщений: 560
10.05.2014, 21:57  [ТС]     Беда с наследованием. Организация многофайлового приложения #7
Спасибо Решил с помощи
C++
1
#pragma once
Yandex
Объявления
10.05.2014, 21:57     Беда с наследованием. Организация многофайлового приложения
Ответ Создать тему
Опции темы

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