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

Как узнать тип переменной

03.02.2021, 08:40. Показов 2013. Ответов 6

Author24 — интернет-сервис помощи студентам
Всем привет! У меня возникла задача, решить которую я не смог. Пишу в PlatformIO IDE для Arduino Mega. Задача состояла в определении типа переменной в аргументе метода класса. Если, например, аргумент был типом int16_t, то подставлялась бы переменная-член класса такого же типа и аргумент копировался бы в эту переменную. Ну и соответственно с другими типами. Искал в интернете примеры, нашёл решение через typeid:

C++
1
if (typeid(var) == typeid(int))
но при компиляции выдавало ошибку, что "необходимо включить ключевое слово <typeinfo> перед использованием typeid". Как добавить и куда это слово, пробовал по всякому методом "тыка" результата не дал.
Пробовал подключить файл так, #include <typeinfo.h>, на что мне PlatformIO выдавало ошибку невозможности найти такой файл. Пробовал также #include <type_info.h>, та же ошибка.

Добавлено через 1 час 27 минут
Также выскакивает ошибка "cannot use typeid with -fno-rtti"
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.02.2021, 08:40
Ответы с готовыми решениями:

AVR Studio 4 как узнать значение переменной при отладке?
Приветствую. Есть вопрос, имеется CAN контроллер, имеется JTAG ICE, имеется AVR Studyo 4 и это всё...

Как узнать тип переменной?
Здравствуйте! Не давно начал заниматься изучением языка С++, и возник вопрос. Как узнать узнать...

Как программно узнать тип переменной?
всем привет! Вопрос описан в описании. Заранее спасибо!

Как узнать,какой тип данных хранится в переменной String?
Здравствуйте.Помогите,пожалуйста,с решением задачи. Надо составить 3 подфункции функции под...

6
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
03.02.2021, 10:44 2
Цитата Сообщение от алексей байдин Посмотреть сообщение
Пробовал подключить файл так, #include <typeinfo.h>,
ну а почитать что то про typeid?? например
https://docs.microsoft.com/ru-... w=msvc-160
там в примере ясно написано #include <typeinfo>
и такие вопросы задаются в ветке C++, ибо к AVR имеют мало отношения
0
1 / 1 / 0
Регистрация: 04.12.2017
Сообщений: 58
03.02.2021, 14:12  [ТС] 3
Цитата Сообщение от ValeryS Посмотреть сообщение
там в примере ясно написано#include <typeinfo>
и такие вопросы задаются в ветке C++, ибо к AVR имеют мало отношения
Попытаюсь ответить... Так тоже не подключается. Все примеры, что я находил, связанные с этой темой по отношению к программе написанной для микроконтроллера, я не нашёл (не скажу что искал усердно), а видел только то, что написано для компьютерных программ, где например есть такой код:
C++
1
cout << a << endl;
C++
1
#include <iostream>
В PlatformIO такой файл (<typeinfo>) не подключается, даже с расширением .h в конце названия файла. Поэтому я решил создать тему вопроса здесь.
Цитата Сообщение от ValeryS Посмотреть сообщение
ну а почитать что то проtypeid?? например
Пробовал почитать, немного пока понимаю в некоторых вещах. Понял из прочитанного, (и ранее предполагал) то, что когда у меня выскакивает ошибка
Цитата Сообщение от алексей байдин Посмотреть сообщение
cannot use typeid with -fno-rtt
это значит, что компилятор не может выполнить проверку во время компиляции.
Я предполагал, что это из-за того, что я пытаюсь (попытаюсь объяснить) узнать тип указателя на метод класса, когда этот самый метод возвращает какое-то значение, тип которого неизвестен (как я думаю, судя по коду) во время компиляции.
Попытался также провернуть такое с уже известными по типам инициализированными глобальными переменными - те же ошибки...

Добавлено через 20 минут
Может тогда привести конкретно строки моего кода и что я хочу... Попытаюсь выложить и объяснить понятно. Есть класс со статичными PRIVATE переменными-членами, а также со статичными методами получения значения этих переменных класса.
C++
1
2
3
4
5
6
7
class TS
{ public:
   static int16_t getVar() { return _var;}
 
   private:
   static int16_t _var;
}
Есть другой класс, который получает значение переменной _var вышеприведённого класса TS. В нём есть шаблон метода (потому что я не знаю, значение какого типа переменной будет изыматься из другого класса):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class PrintVar
{ public:
   template <typename T>
   void InitPrintVar(T (*p0)());
 
  private:
  int16_t _i_var;
  uint16_t _u_var;
  float _f_var;
}
 
template <typename T>
void PrintVar::InitPrintVar(T(*p0)())
{// здесь бы мне хотелось через typeid узнать тип указателя и соответственно 
  // либо _i_var, либо в _u_var, либо в _f_var записать значение из указателя на метод p0()
}
указатели я объявляю как:
C++
1
2
3
int16_t (*pIntFunc)();
uint16_t (*pIntFunc)();
float (*pIntFunc)();
присваиваю им методы:
C++
1
pIntFunc = &TS::getVar;
Тут вроде делаю всё правильно, ошибок никаких. Но как пытаюсь узнать тип указателей, ошибка...
Кто чем поможет...?
0
Тутошний я
2146 / 1201 / 225
Регистрация: 03.11.2009
Сообщений: 4,416
Записей в блоге: 2
03.02.2021, 16:22 4
видимо решили, что программисту виднее какой тип передаётся.
мне попадался код, 2 функции с одинаковыми названиями, но данные передавались разных типов.
одна функция преобразовывала тип и вызывала другую функцию. переменная одна была.
а здесь видимо придётся писать 3 функции. каждую под свой тип.
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
03.02.2021, 20:19 5
Цитата Сообщение от алексей байдин Посмотреть сообщение
C++
1
2
3
int16_t (*pIntFunc)();
uint16_t (*pIntFunc)();
float (*pIntFunc)();
т.е разница только в возвращаемых типах?
не уверен, но по моему, для перегрузки функций нужны или разные типы или количество аргументов, по возвращаемым типам функции не перегружаются
но спросить об этом лучше в https://www.cyberforum.ru/cpp-beginners/
0
1 / 1 / 0
Регистрация: 04.12.2017
Сообщений: 58
04.02.2021, 09:36  [ТС] 6
ValeryS, я тут ошибку нашёл в том что пытался объяснить. Написал
Цитата Сообщение от алексей байдин Посмотреть сообщение
int16_t (*pIntFunc)();
uint16_t (*pIntFunc)();
float (*pIntFunc)();
Не так нужно было мне написать - одинаковые же названия у указателей! Надо было так:
C++
1
2
3
int16_t (*pStIntMetod)();                        
uint16_t (*pStUIntMetod)();                            
float (*pStFloatMetod)();
0
28 / 21 / 8
Регистрация: 05.08.2012
Сообщений: 108
09.02.2021, 13:24 7
Цитата Сообщение от ValeryS Посмотреть сообщение
не уверен, но по моему, для перегрузки функций нужны или разные типы или количество аргументов, по возвращаемым типам функции не перегружаются
точно. перегружаться должны входные параметры. Такой вариант перегрузки не катит.
0
09.02.2021, 13:24
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.02.2021, 13:24
Помогаю со студенческими работами здесь

Узнать тип переменной
Хоть убейте, но не могу узнать как сделать сравнение типа: var A: ^MyStruct; begin if...

Узнать тип переменной
1) Как узнать тип переменной? Что то типо такого возможно?: if ( getType(var) == &quot;int&quot;) 2)...

Узнать тип переменной
Здравствуйте уважаемые программисты. У меня возник глупый вопрос. Как узнать тип переменной(нужно...

template, узнать тип переменной
template &lt;class RCIN&gt; RCIN cinn(void) { RCIN enter; if(RCIN == std::string) // Как узнать тип...

Как определить тип переменной, ссылающейся на определённый класс? Нужен именно тип, а не ссылка на обьект!
interface HowDefineMyType { void info(); } class A implements HowDefineMyType { ...

Получить тип переменной и задать её переменной типа тип
то есть int A = 213213 Type B = A.GetType() - ну надо что-то вроде этого но для Type b =...


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

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