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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 5.00
SIvan
3 / 3 / 1
Регистрация: 10.05.2011
Сообщений: 19
#1

Как включить класс из внешнего файла в пространство имён? - C++

25.02.2012, 13:13. Просмотров 1129. Ответов 4
Метки нет (Все метки)

У меня есть несколько .hpp файлов с объявлениями классов, типа этого:
C++
1
2
3
4
5
6
7
8
#ifndef EXPRESSION_HPP_INCLUDED
#define EXPRESSION_HPP_INCLUDED
template <class T>
class expression
{
//Объявление класса
}
#endif // EXPRESSION_HPP_INCLUDED
Я хочу их включить в одно пространство имен:
C++
1
2
3
4
5
6
7
8
9
10
#ifndef FCNAMESPACE_HPP_INCLUDED
#define FCNAMESPACE_HPP_INCLUDED
 
namespace fractionCalc
{
    #include <fraction.hpp>
    #include <expression.hpp>
}
 
#endif // FCNAMESPACE_HPP_INCLUDED
Файл main:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <string>
#include <FCNamespace.hpp>
 
using namespace std;
 
int main()
{
    string expression;
    cin >>expression;
    fractionCalc::expression <fractionCalc::fraction> result(expression);
    cout <<result.value();
}
Выдаёт ошибку (компилятор GNU GCC):
Код
/home/students/s0835/Documents/fractionCalc/main.cpp||In function ‘int main()’:|
/home/students/s0835/Documents/fractionCalc/main.cpp|13|error: ‘expression’ is not a member of ‘fractionCalc’|
/home/students/s0835/Documents/fractionCalc/main.cpp|13|error: missing template arguments before ‘>’ token|
/home/students/s0835/Documents/fractionCalc/main.cpp|13|error: ‘result’ was not declared in this scope|
||=== Сборка закончена: 12 ошибок, 0 предупреждений ===|
Как корректно объединить классы из файлов в единое пространство имён?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.02.2012, 13:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как включить класс из внешнего файла в пространство имён? (C++):

Как внести класс в пространство имён - C++
Есть задача, которую решил, там надо было поработать в пространстве имён. В следующей необходимо было это всё переделать под класс,...

пространство имён - C++
Здравствуйте. Из C# я примерно представляю что такое пространство имён. Но возникает вопрос. Допустим в программе я использую...

Пространство имён! - C++
Как лучше указывать пространство имён? using namespace std вначале? или std::? вроде бы проще первый вариант, но почему используют...

Пространство имён - C++
Прочитал сейчас раздел про пространство имён, но так всё равно и не понял, почему лучше не использовать директиву using. Допустим,...

Пространство имён - C++
Добрый вечер, 1) как правильно называется часть &quot;Foo::&quot; в этой записи void Foo::hello(){} 2) и почему не сделают using namespace...

Пространство имён - C++
Допустим я пишу свою программу, для которой пишу свои классы. Стоит ли создавать для них пространство имён? И вообще, в каких ситуациях...

4
Dekio
Фрилансер
Эксперт С++
5837 / 1218 / 214
Регистрация: 23.11.2010
Сообщений: 3,378
Записей в блоге: 1
25.02.2012, 13:17 #2
Цитата Сообщение от SIvan Посмотреть сообщение
string expression;
Вот зачем создавать строку с именем названия класса?
0
SIvan
3 / 3 / 1
Регистрация: 10.05.2011
Сообщений: 19
26.02.2012, 21:28  [ТС] #3
Цитата Сообщение от Dekio Посмотреть сообщение
Вот зачем создавать строку с именем названия класса?
Допустим, что надо. Я хочу понять, как работать с нэймспейсами. Это самое естественное название)
0
DU
1484 / 1130 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
26.02.2012, 22:13 #4
имена в скоупы вносятся с помощью using объявления.

в вашем случае это вроде так должно быть:

C++
1
2
3
4
namespace fractionCalc
{
  using ::expression;
}
1
SIvan
3 / 3 / 1
Регистрация: 10.05.2011
Сообщений: 19
27.02.2012, 09:58  [ТС] #5
Спасибо DU, Я Понял, получается так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
#ifndef FCNAMESPACE_HPP_INCLUDED
#define FCNAMESPACE_HPP_INCLUDED
#include <fraction.hpp>
#include <expression.hpp>
 
namespace fractionCalc
{
    using ::expression;
    using ::fraction;
}
 
#endif // FCNAMESPACE_HPP_INCLUDED
0
27.02.2012, 09:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.02.2012, 09:58
Привет! Вот еще темы с ответами:

Зачем создавать безымянное пространство имён, если я могу просто написать static? - C++
Народ, прочитал что в С++ для объявления статической глобальной переменной используют вот такую штуку: namespace { int x; ...

Почему в списке инициализации конструктора дочернего класса нельзя вызывать конструктор родительского через его пространство имён? - C++
Есть класс D и от него порождён класс Wd Тут вот например всё работает корректно (использую обращение ч/з пространство имён класса &quot;D::&quot; ...

Как дополнить вложенный класс при наследовании внешнего? - C++
Допустим, есть класс B, лежащий в классе A. Каким образом класс D, лежащий в C (C наследует A), может наследовать класс B и изменить его?

Определить класс-строку. В класс включить два конструктора: для определения класса строки строкой символов и п - C++
Определить класс-строку. В класс включить два конструктора: для определения класса строки строкой символов и путем копирования другой...


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

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

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