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

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

Восстановить пароль Регистрация
 
IvanPryamoy_2
0 / 0 / 0
Регистрация: 21.01.2013
Сообщений: 23
07.02.2013, 18:05     Взаимно пересекающиеся хидеры у двух файлов #1
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""

Как увязать два файла друг с другом?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Саня gamer
96 / 70 / 1
Регистрация: 18.05.2011
Сообщений: 343
Записей в блоге: 1
07.02.2013, 18:07     Взаимно пересекающиеся хидеры у двух файлов #2
препроцесорную обёртку попробуй
Tiva
94 / 94 / 1
Регистрация: 25.04.2012
Сообщений: 429
07.02.2013, 18:10     Взаимно пересекающиеся хидеры у двух файлов #3
в хедеры добавляйте
C++
1
2
3
4
#ifndef Headername_H
#define Headername_H
...//код хидера
#endif
Добавлено через 1 минуту
так по-моему только для вижуалки
в билдере через #pragma once вроде
IvanPryamoy_2
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 я прячу реализацию), либо логикой программы (в одном файле моя библиотека, во втором- функции операционной системы....).

Поэтому переразбиение на файлы (если таковое решит вопрос) должно учитывать это.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11811 / 6790 / 767
Регистрация: 27.09.2012
Сообщений: 16,840
Записей в блоге: 2
Завершенные тесты: 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

у вас два класса наследуются от двух не определенных классов
Yandex
Объявления
08.02.2013, 09:47     Взаимно пересекающиеся хидеры у двух файлов
Ответ Создать тему
Опции темы

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