Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/13: Рейтинг темы: голосов - 13, средняя оценка - 5.00
29 / 58 / 6
Регистрация: 10.01.2011
Сообщений: 1,231

Директива #ifndef

03.02.2016, 14:50. Показов 2642. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Есть такой код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#define lastVersion
#ifndef lastVersion
#include <version1.h>
 
int main()
{
    ClassA A;
}
#else
#include <version2.h>
 
int main()
{
    ClassB B;
}
#endif
Проблема в том что компилятор ругается на вторую часть. Как это исправить?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.02.2016, 14:50
Ответы с готовыми решениями:

#ifndef и #include
Допустим, я создал класс #ifndef SOMECLASS_H #define SOMECLASS_H class SomeClass{}; #endif Есть несколько вопросов.

Почему отказались от #ifndef?
Всем привет, Лафоре пишет, что от использовании директивы #ifndef стали отказываться в пользу #if !defined(). Может кто-нибудь объяснить...

Объяаление #ifndef STRING_H_
Вот мы объявляем #include &lt;iostream&gt; #ifndef STRING_H_ #define STRING_H_ Уже не редко встречаю такое включение string.h Просто...

14
 Аватар для HighPredator
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
03.02.2016, 15:00
А как именно ругается? От этого все и зависит.
1
29 / 58 / 6
Регистрация: 10.01.2011
Сообщений: 1,231
03.02.2016, 15:46  [ТС]
HighPredator
он не знает СlassB

Добавлено через 1 минуту
Если вынести #include <version2.h> в самое начало тогда компилятор не будет ругаться, но проблема в том, что нельзя в начало выводить

Добавлено через 1 минуту
А нельзя потому что этой библиотеки нет на другом компьюетре
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
03.02.2016, 15:48
Цитата Сообщение от Helldrg Посмотреть сообщение
он не знает СlassB
Так и мы не знаем.
1
 Аватар для HighPredator
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
03.02.2016, 16:02
Цитата Сообщение от Helldrg Посмотреть сообщение
он не знает СlassB
Если СlassB не описан в заголовочном файле version2.h, то ошибка закономерна. И тогда три варианта (наиболее вероятны):
- неверно составлены директивы препроцессора
- ошибка в коде (создается экземпляр не того класса)
- подключен не тот заголовочный файл.
1
29 / 58 / 6
Регистрация: 10.01.2011
Сообщений: 1,231
03.02.2016, 16:47  [ТС]
HighPredator
Он описан там, если эту библиотеку в самом начале подключить все нормально будет

Добавлено через 3 минуты
Поправочка, если выше поставить библиотеку тогда все равно компилятор будет ругаться, а вот если закомментировать #define lastVersion тогда будет работать
0
 Аватар для HighPredator
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
03.02.2016, 16:53
Helldrg, ерунда. Для вашего куска кода
C
1
2
3
4
5
6
#include <version2.h>
 
int main()
{
    ClassB B;
}
Он и так "вверху" подключен. Вы или что-то перепутали, или что-то не то делаете. Короче код в студию. Ваших хэдеров и модуля с главной подпрограммой.
1
29 / 58 / 6
Регистрация: 10.01.2011
Сообщений: 1,231
03.02.2016, 16:57  [ТС]
Кликните здесь для просмотра всего текста
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
43
44
45
46
47
//***************************************************************************
// main.cpp
//
//***************************************************************************
#include "windowclass.h"
 
//#define lastVersionOpengl
 
// If verison opengl < 5.4
#ifndef lastVersionOpengl
#include <QApplication>
 
 
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
 
    WindowClass w;
    w.resize(QSize(800, 600));
    w.show();
 
    return a.exec();
}
 
// If verison opengl >= 5.4
#else
#include <QGuiApplication>
 
int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);
 
    QSurfaceFormat format;
    format.setRenderableType(QSurfaceFormat::OpenGL);
    format.setProfile(QSurfaceFormat::CoreProfile);
    format.setVersion(3, 3);
 
    WindowClass window;
    window.setFormat(format);
    window.resize(QSize(800, 600));
    window.show();
 
    return app.exec();
}
 
 
#endif

Если раскоментить дефайн тогда компилятор будет показывать ошибки, что он не знает QSurfaceFormat
0
 Аватар для HighPredator
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
03.02.2016, 17:05
Полный текст ошибки компилятора приведите.
1
03.02.2016, 17:13

Не по теме:

C++
1
2
3
// If verison opengl < 5.4
...
// If verison opengl >= 5.4
o_O

0
29 / 58 / 6
Регистрация: 10.01.2011
Сообщений: 1,231
03.02.2016, 17:14  [ТС]
Полный текст ошибки компилятора приведите
Кликните здесь для просмотра всего текста
C:\Qt\projects\OpenGLTerrain_02\main.cpp :36: ошибка: C2065: 'QSurfaceFormat' : undeclared identifier
C:\Qt\projects\OpenGLTerrain_02\main.cpp :36: ошибка: C2146: syntax error : missing ';' before identifier 'format'
C:\Qt\projects\OpenGLTerrain_02\main.cpp :36: ошибка: C2065: 'format' : undeclared identifier
C:\Qt\projects\OpenGLTerrain_02\main.cpp :37: ошибка: C2065: 'format' : undeclared identifier
C:\Qt\projects\OpenGLTerrain_02\main.cpp :37: ошибка: C2228: left of '.setRenderableType' must have class/struct/union
type is ''unknown-type''
C:\Qt\projects\OpenGLTerrain_02\main.cpp :37: ошибка: C2653: 'QSurfaceFormat' : is not a class or namespace name
C:\Qt\projects\OpenGLTerrain_02\main.cpp :37: ошибка: C2065: 'OpenGL' : undeclared identifier
C:\Qt\projects\OpenGLTerrain_02\main.cpp :38: ошибка: C2065: 'format' : undeclared identifier
C:\Qt\projects\OpenGLTerrain_02\main.cpp :38: ошибка: C2228: left of '.setProfile' must have class/struct/union
type is ''unknown-type''
......
0
 Аватар для HighPredator
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
03.02.2016, 17:16
Лучший ответ Сообщение было отмечено Helldrg как решение

Решение

Цитата Сообщение от Helldrg Посмотреть сообщение
Если раскоментить дефайн тогда компилятор будет показывать ошибки, что он не знает QSurfaceFormat
О! Ничего не замечаете? Вы инклудите QGuiApplication, а QSurfaceFormat согласно документации описан в хэдере... QSurfaceFormat.
1
29 / 58 / 6
Регистрация: 10.01.2011
Сообщений: 1,231
03.02.2016, 17:17  [ТС]
castaway
Спасибо большое, пока вам объяснение писал ошибку нашел =)

Добавлено через 35 секунд
HighPredator
Да спасибо большое!
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
03.02.2016, 17:24
Цитата Сообщение от Helldrg Посмотреть сообщение
castaway
Спасибо большое, пока вам объяснение писал ошибку нашел =)
Да.., я то по большому счёту к решению проблемы не имею отношения.
1
29 / 58 / 6
Регистрация: 10.01.2011
Сообщений: 1,231
03.02.2016, 17:31  [ТС]
castaway
Просто я стал описывать, что в новой версии опенгл появился класс,которым невозможно пользоваться на старых видеокартах и хотел скинуть название этого класса, посмотрел что я подключаю и не много под офигел когда увидел что класс я не подключил. Я ведь уверен был, что он подключен, а оказалось(((
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.02.2016, 17:31
Помогаю со студенческими работами здесь

Команды #ifndef #ifdef и #endif
Помогите разобраться с командами #ifndef #endif и #ifndef в книге все как то не понятно объяснено или же лучше если у кого то есть видео на...

Какую функцию выполняет #ifdef и #ifndef ?
#ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 101 #define _APS_NEXT_COMMAND_VALUE...

Назначение директив препроцессора: #ifndef, #define, #endif
Объясните, что обозначают эти директивы? Заем это использовать в классах? #ifndef myclass #define myclass class someclass { ...

Объясните, в чем суть директив #ifndef/#define/#endif
Не понял в чем суть директив: #ifndef .. #define.. #endifОбъясните пожалуйста..это как - то связано с хедерами, но вот как ??

Как влияет inline и обертка(#ifndef #define #endif) .h файла на компоновщик.
Есть файл Point.h: #ifndef POINT_GUARD #define POINT_GUARD ...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru