Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 21.01.2013
Сообщений: 23
1

Взаимно пересекающиеся хидеры у двух файлов

07.02.2013, 18:05. Показов 798. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
MyLib.h:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include "..\MyLib\MyLib_dev_h.h"
 
namespace MyLib
{
    class Lib1
    {
    public:
        int A;
    };
 
    class Lib2: public MyLib_dev_h::Lib1
    {
    public:
        int B;
    };
}
MyLib_dev.h:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include "..\MyLib\MyLib.h"
 
namespace MyLib_dev_h
{
    class Lib1
    {
    public:
        int A;
    };
 
    class Lib2: public MyLib::Lib1
    {
    public:
        int B;
    };
}
Проще говоря, файлы взаимозависимы. Получаем ошибку компиляции: "error C2653: MyLib: не является именем класса или пространства имен".

Если во второй файл сверху добавить строчки:
C++
1
2
3
4
5
6
7
8
namespace MyLib
{
    class Lib1
    {
    public:
        int A;
    };
}
то получаем ошибку: "error C2011: MyLib::Lib1: переопределение типа "class""

Как увязать два файла друг с другом?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.02.2013, 18:05
Ответы с готовыми решениями:

3 взаимно пересекающиеся окружности
1. Окружность на плоскости может быть задана координатами x, y ее центра и радиусом r. Пусть даны...

Почему-то ни вижуал студийные хидеры ни хидеры проекта GLUT не компилириуются(компилятор MinGW), почему?
В составе компилятора тоже хидеры для OpenGL но так же не компилируются.. Вот сурсы: 1.cpp,...

Сложение двух взаимно перпендикулярных колебаний
Помогите, пожалуйста, с решением задачи. Складываются два взаимно перпендикулярных колебания с...

Про самописные классы и их хидеры
Привет! Создаю h-файл и cpp-файл. Расписываю там класс или функцию, затем включаю хидер в проект и...

4
97 / 71 / 5
Регистрация: 18.05.2011
Сообщений: 343
Записей в блоге: 1
07.02.2013, 18:07 2
препроцесорную обёртку попробуй
1
96 / 96 / 21
Регистрация: 25.04.2012
Сообщений: 449
07.02.2013, 18:10 3
в хедеры добавляйте
C++
1
2
3
4
#ifndef Headername_H
#define Headername_H
...//код хидера
#endif
Добавлено через 1 минуту
так по-моему только для вижуалки
в билдере через #pragma once вроде
1
0 / 0 / 0
Регистрация: 21.01.2013
Сообщений: 23
08.02.2013, 09:28  [ТС] 4
Цитата Сообщение от Tiva Посмотреть сообщение
в хедеры добавляйте
C++
1
2
3
4
#ifndef Headername_H
#define Headername_H
...//код хидера
#endif
Добавлено через 1 минуту
так по-моему только для вижуалки
в билдере через #pragma once вроде
Попробовал в обоих случаях (с добавкой строк и без) результат без изменений.

Кстати, в обоих файлах я использую
C++
1
#pragma once
, поэтому подобные обертки не нужны (эту строчку не добавил в код, чтобы не засорять примеры).

Добавлено через 15 часов 7 минут
Разбиение на файлы задается либо созданием интерфейса (в данном случае в файл MyLib_dev.h я прячу реализацию), либо логикой программы (в одном файле моя библиотека, во втором- функции операционной системы....).

Поэтому переразбиение на файлы (если таковое решит вопрос) должно учитывать это.
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,737
Записей в блоге: 1
08.02.2013, 09:47 5
Такой вариант устроит?
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
//MyLib.h
#ifndef _MYLIB_H_
#define _MYLIB_H_
 
 
namespace MyLib
{
    class Lib1
    {
    public:
        int A;
    };
}
#include "MyLib_dev_h.h"
namespace MyLib{
    class Lib2: public MyLib_dev_h::Lib1
    {
    public:
        int B;
    };
}
 
 
#endif
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
//MyLib_dev_h.h
#ifndef _MYLIB_DEV_H_
#define _MYLIB_DEV_H_
 
 
 
namespace MyLib_dev_h
{
    class Lib1
    {
    public:
        int A;
    };
}
#include "MyLib.h"
namespace MyLib_dev_h{
    class Lib2: public MyLib::Lib1
    {
    public:
        int B;
    };
}
 
 
#endif

у вас два класса наследуются от двух не определенных классов
1
08.02.2013, 09:47
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.02.2013, 09:47
Помогаю со студенческими работами здесь

Расширенный алгоритм Евклида для двух взаимно простых чисел, буду благодарен)
Расширенный алгоритм Евклида для двух взаимно простых чисел. Выведите результат на экран.

Напишите уравнение траектории точки, участвующей одновременно в двух взаимно перпендикулярных колебаниях
7. Напишите уравнение траектории точки, участвующей одновременно в двух взаимно перпендикулярных...

Как в нужном порядке подключить хидеры?
Здравствуйте! Возникла проблема с подключение windows.h. Структура программы: main.c <-...

Проверить, будут ли числа a, b, c, d попарно взаимно просты.Нахождение НОД двух чисел оформить в виде подпрограммы.
Проверить, будут ли числа a, b, c, d попарно взаимно просты. Числа называются взаимно простыми,...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru