0 / 0 / 0
Регистрация: 05.10.2018
Сообщений: 22
|
||||||
1 | ||||||
Переменные в поле #define05.10.2018, 19:09. Показов 2528. Ответов 31
Здравствуйте. Возник такой вопрос: как ведут себя переменные в поле #ifdef?
Допустим, я создаю класс и в нём прописываю такие строки:
Можете, пожалуйста, объяснить мне, как это работает?
0
|
05.10.2018, 19:09 | |
Ответы с готовыми решениями:
31
Почему нельзя использовать в операторе case переменные, которые определены как #define Как реализовать директиву #define для создания шаблона отпределения #define ? Скрытие столбцов. Ошибка App-define od obj-define error Друзья, подскажите, как в классе создать константное поле, ссылочное поле и объектное поле? |
18840 / 9839 / 2408
Регистрация: 30.01.2014
Сообщений: 17,280
|
|
06.10.2018, 18:07 | 21 |
Отвечая на исходный вопрос, если из предыдущих ответов это было не понятно, они ведут себя точно так же, как и вне его - никакого подобного магического влияния, описываемого в стартовом топике оно не оказывает. Более того, языковые конструкции ничего не знают про препроцессор, а препроцессор ничего не знает про них. А магическое поведение обусловлено чем-то другим. И до тех пор, пока автор не оставит соблазнительный путь свалить все на препроцессор, он проблему не решит.
0
|
0 / 0 / 0
Регистрация: 05.10.2018
Сообщений: 22
|
|
06.10.2018, 18:17 [ТС] | 22 |
Я пытаюсь сделать так, что переменная COLOR должна создаваться в #indef и там же она получает своё значение.
Это здесь не важно, так как переменная используется только внутри класса. Что в private, что в public - эффект одинаковый. Кстати да, спасибо. Не заметил этой глупой ошибка. Но этот код никак не влияет на код после цикла. Там просто загружаются текстуры(если их несколько). Это, конечно, костыль и один объект должен иметь одну текстуру, ведь так тратится меньше памяти и процессорного времени, но это был эксперимент "А СМОГУ ЛИ Я СДЕЛАТЬ". Я все значения в uniform передаю по указатель, и все они работают. Я уже кое-как решил эту проблему. Просто сделал сеттер uniform прямо в классе. Добавлено через 55 секунд Я не сваливаю, а спрашиваю: почему так происходит? Где вы вообще заметили, что я виню препроцессор?) Добавлено через 42 секунды Можно не гадать, а, как нормальные люди, использовать отладчик для этого
0
|
18840 / 9839 / 2408
Регистрация: 30.01.2014
Сообщений: 17,280
|
|
06.10.2018, 18:20 | 23 |
Мало информации даете.
Пока что только можно сказать, что ваша гипотеза не верна. Если препроцессор в этом и задействован, то только лишь косвенно, а не описываемым вами образом.
0
|
0 / 0 / 0
Регистрация: 05.10.2018
Сообщений: 22
|
|
06.10.2018, 18:22 [ТС] | 24 |
А какая информация ещё нужна? Меня попросили дать нужную информацию - я и дал. Что ещё нужно?
0
|
18840 / 9839 / 2408
Регистрация: 30.01.2014
Сообщений: 17,280
|
|
06.10.2018, 18:25 | 25 |
Т.к. совершенно очевидно, что проблема комплексная, а источник ее возможно находится совсем в другом месте от места проявления, то было бы неплохо предоставить полный код вместе с файлами проекта, чтобы можно было проанализировать что на что влияет. Скриншотами кусочков кода этого точно не выяснить...
0
|
0 / 0 / 0
Регистрация: 05.10.2018
Сообщений: 22
|
|
06.10.2018, 18:31 [ТС] | 26 |
Я мог бы скинуть код, но:
1. Есть ли в этой теме человек, который знает OpenGL? 2. Проблема уже, частично, решена с помощью сетера uniform
0
|
18840 / 9839 / 2408
Регистрация: 30.01.2014
Сообщений: 17,280
|
|
06.10.2018, 18:37 | 27 |
Понимаете ли что... заставлять вас, конечно, это делать никто не будет.
Если вы считаете, что лучше справитесь с диагностикой проблемы - это очень хорошо, только зачем тогда писать на форум? Если вы уверены, что абсолютно все правильно сделали - это еще лучше! Я лишь только сказал, что знающие люди, коих тут достаточно много, могли бы посмотреть ваш проект и указать вам на ошибки, если таковые имеются. Единственное, что вы должны тут понять - по скриншотам код отладить можно только случайно. Если вы пришли на форум с комплексной проблемой, то нужно либо потратить некоторое свое время и написать демонстрационный пример, с которым можно задать вопрос о странном, на ваш взгляд, поведением, либо, если времени и\или навыков выделить важное нет, то скинуть код проекта. Остальные, даже успешные прецеденты помощи по фотографии, можно считать счастливой случайностью.
1
|
Вездепух
11694 / 6373 / 1723
Регистрация: 18.10.2014
Сообщений: 16,059
|
|||||||||||
06.10.2018, 18:42 | 28 | ||||||||||
Нет, нет, нет. Это совсем не так работает. Определение полей класса - это не исполнимый код. Там никто не может "создаваться" и не может "получать значение".
Когда вы указываете инициализатор для поля класса прямо в определении класса - как в вашем случае - этот инициализатор является не более чем указанием компилятору, что делать потом в конструкторе класса. Ваше
COLOR произойдет именно в конструкторе класса. Поэтому я советую вам пойти именно в конструктор класса и проверить значение поля COLOR там. Если инициализация выполняется корректно, т.е. внутри конструктора значение действиельно равно (1.0, 1.0, 1.0) , то это будет означать, что С++ сторона вопроса работает правильно. А поле COLOR превращается в нули где-то позже, по каким-то совершенно посторонним причинам ("затирание" или какая-то другая модификация).
0
|
0 / 0 / 0
Регистрация: 05.10.2018
Сообщений: 22
|
|
07.10.2018, 18:57 [ТС] | 31 |
Я считаю, что здесь многие люди задают слишком глупые вопросы)
Дело в том, что С++ - это не только OpenGL. И, возможно, что тот, кто мне пытается помочь - не знаком с этой библиотекой. Добавлено через 11 минут Хорошо, спасибо за ответ. Но он всё равно возвращает нули. Ладно, в любом случае мне эта переменная больше не нужна: теперь можно просто настраивать свет через сетеры. Ещё раз спасибо, за потраченное время
0
|
Вездепух
11694 / 6373 / 1723
Регистрация: 18.10.2014
Сообщений: 16,059
|
|
07.10.2018, 20:42 | 32 |
Вопрос, который вы задали изначально, не относится к OpenGL никаким боком вообще, а является чисто и исключительно С++ вопросом.
Привносить в эту тему OpenGL и его особенности имеет смысл только в том случае, если мы уже окончательно установили, что изначальная инициализация переменной прошла успешно, а дальнейшее "странное" нулевое значение - это результат последующего "затирания". Кто "он"? Конструктор? Вы видите нули в COLOR даже в конструкторе класса, несмотря на объявление с инициализатором?
0
|
07.10.2018, 20:42 | |
07.10.2018, 20:42 | |
Помогаю со студенческими работами здесь
32
Внутриблочные переменные не могут иметь те же имена, что и переменные из блока верхнего уровня Создать программу обработки массивов структур используя структурные переменные и переменные типа объеденения Почему в локальном классе доступны финальные переменные или переменные инициализированные при объявлении Запись из формы данных в переменные php файла, данные из переменные используются в других файлах сайта Переменные экземпляра, класса, константы и переменные readonly Переменные,значение функции,вспомогательные переменные. Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |