Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 25.06.2015
Сообщений: 27
1

Почему не получается разместить include в namespace?

31.07.2022, 17:43. Показов 2304. Ответов 5
Метки c++, qt (Все метки)

Author24 — интернет-сервис помощи студентам
Решил я сделать красивый и удобный код для ядра своей программы
Чтобы каждый раздел кода(namespace) имел свои включения, но встретился с грудой ошибок.
Конечно я мог бы использовать pragma region чтобы подразделять включения в своём заголовочном файле, но это не красиво. Практично, но не красиво.

Код который использую в заголовочном файле:
C++
1
2
3
4
5
6
namespace NamespaceExample
    { 
        #include <QtCore>
         void Example();
 
    }
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.07.2022, 17:43
Ответы с готовыми решениями:

Namespace & #include что-то непонятное
Есть проект состоящий из множества файлов cpp и h. и имена классов в них пересекаются, но не беда...

#include <list> - конфликт using namespace std с другими инклюдами
Всем привет. Появилась надобность использовать списки, однако #include &lt;list&gt; подключается только...

Работа с файлами в C# с исп. библиотек #include <stdio.h> #include <stdlib.h> #include <math.h> #include <io.h>
В типизированном файле записаны названия городов и их численность. Увеличить численность каждого...

Почему xaml не видит namespace?
Имеется C# Для Windows Phone, VS2013 XAML &lt;Application x:Class=&quot;PivotApp3.App&quot; ...

5
6105 / 3460 / 1405
Регистрация: 07.02.2019
Сообщений: 8,791
31.07.2022, 18:09 2
Цитата Сообщение от Agemaker Посмотреть сообщение
Решил я сделать красивый и удобный код для ядра своей программы
Поробуй сделать рабочий.
Цитата Сообщение от Agemaker Посмотреть сообщение
Чтобы каждый раздел кода(namespace) имел свои включения, но встретился с грудой ошибок.
namespace - это не раздел кода, это пространство имен. Директива include просто подставляет содержимое файла в это место - а значит все объявления будут расположены в пространстве имен, т.е. имена всех символов будут квалифицированны NamespaceExample::<имя>. Ну и компилятор не сможет найти определения этих символов, т.к. имена изменились.
0
0 / 0 / 0
Регистрация: 25.06.2015
Сообщений: 27
31.07.2022, 18:27  [ТС] 3
А можно объяснить для питекантропа? Я не то чтобы профи в разработке на C++, только изучаю. Этим и обусловлен мой вопрос

Добавлено через 1 минуту
Цитата Сообщение от zayats80888 Посмотреть сообщение
Поробуй сделать рабочий.
Конечно сделаю рабочий, когда решу эту проблему)
0
6105 / 3460 / 1405
Регистрация: 07.02.2019
Сообщений: 8,791
31.07.2022, 18:41 4
Лучший ответ Сообщение было отмечено Agemaker как решение

Решение

Цитата Сообщение от Agemaker Посмотреть сообщение
А можно объяснить для питекантропа?
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
// header.h
void foo(); // объявление символа foo (точнее ::foo, т.к. объявлен в глобальном нэймспэйсе)
 
// header.cpp
void foo() // определение символа ::foo
{
  //...
}
 
// right.cpp
// #include "header.h" на этапе препроцессинга просто подставляется содержимое, т.е.
void foo(); // объявление символа foo (точнее ::foo, т.к. объявлен в глобальном нэймспэйсе)
 
namespace ns
{
void bar()
{
  foo(); // тот самый ::foo, определение находится в файле header.cpp
}
}
 
// wrong.cpp
namespace ns
{
// #include "header.h" на этапе препроцессинга просто подставляется содержимое, т.е.
void foo(); // объявление символа foo (точнее ns::foo, т.к. объявлен в нэймспэйсе ns)
void bar()
{
  foo(); // ns::foo, определение этого символа отсутствует, о чем и скажет компоновщик
}
}
Добавлено через 3 минуты
Цитата Сообщение от Agemaker Посмотреть сообщение
Конечно сделаю рабочий, когда решу эту проблему)
Не надо создавать проблемы, тогда и решать их не придется.
Т.е. просто пиши правильно, а не "красиво"
2
SomniPhobia
04.08.2022, 07:08
  #5

Не по теме:


Цитата Сообщение от zayats80888 Посмотреть сообщение
Т.е. просто пиши правильно, а не "красиво"
Я бы дополнил: сперва нужно научиться писать правильно. А потом делать это красиво. Но красота не должна противоречить правильности

0
10 / 9 / 1
Регистрация: 23.11.2019
Сообщений: 159
08.08.2022, 22:39 6
если ты находишься в заголовочном файле и тебе нудны классы из библиотеки, то просто объяви эти классы в этом файле в не неймспейса или в нужном нейм спейсес
Таким образом ты просто говоришь, что есть такой класс, но в этом файле тебе не надо знать его интерфейс, что и есть его реализация

файл.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class SomeClass;
 
namespace someNamespace
{
    class SomeOtherClass_inSomeNamespace;
}
 
 
 
 
namespace myNamespace
{
    void myFunction(SomeClass a, someNamespace::SomeOtherClass_inSomeNamespace b);
}
1
08.08.2022, 22:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.08.2022, 22:39
Помогаю со студенческими работами здесь

Почему namespace не первый в скрипте?
всем привет, я думаю из скриншота будет все предельно ясно.

Почему не стоит использовать using namespace std
Хотел еще узнать, почему большенство не используете using namespace std; ? А пишут его в каждой...

Почему using namespace std в разных местах?
Почему в одной программе начало такое #include &lt;iostream&gt; using namespace std; int main() {...

#include<iostream>// подключение библиотек #include <conio.h> #include <climits>
помогите для этой программы сделать блок-схему. Пожалуйста #include&lt;iostream&gt;// подключение...

Почему нельзя написать просто - using namespace boost;
Доброго времени суток. В общем, есть программа, в которой я использую тип cpp_int. Вроде его...

Не получается разместить дивы
Вчера полдня убил на одну проблемку. И так, есть вот такая вёрстка: &lt;!DOCTYPE HTML PUBLIC...


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

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