|
AKIV 0 / 0 / 0 Регистрация: 06.10.2021 Сообщений: 12 |
||||
|
1 |
||||
Ошибка — использование имени типа не допускается06.10.2021, 20:29. Показов 2546. Ответов 6 Метки нет (Все метки)
Ошибка в строках где есть float. И в строке 18 textBox1->Text
0 |
|
фрилансер 4816 / 4419 / 941 Регистрация: 11.10.2019 Сообщений: 11,655 |
|
|
06.10.2021, 20:44 |
2 |
|
AKIV, а это точно C++ ? у типа
1 |
|
0 / 0 / 0 Регистрация: 06.10.2021 Сообщений: 12 |
|
|
06.10.2021, 21:52 [ТС] |
3 |
|
Да, это С++. С помощью форм мне нужно создать калькулятор. И готовый код нам дали учителя, а это часть кода, но он не работает… Добавлено через 5 минут
0 |
|
фрилансер 4816 / 4419 / 941 Регистрация: 11.10.2019 Сообщений: 11,655 |
|
|
06.10.2021, 21:53 |
4 |
|
Да, это С++ не похоже ) что-то напутано — либо язык, либо учителя
0 |
|
0 / 0 / 0 Регистрация: 06.10.2021 Сообщений: 12 |
|
|
06.10.2021, 21:58 [ТС] |
5 |
|
Алексей1153, печалька(
0 |
|
11509 / 7857 / 1194 Регистрация: 21.01.2016 Сообщений: 29,464 |
|
|
07.10.2021, 06:23 |
6 |
|
Да, это С++. Нет, это —
0 |
|
OwenGlendower Администратор
15672 / 12631 / 5005 Регистрация: 17.03.2014 Сообщений: 25,715 Записей в блоге: 1 |
||||
|
07.10.2021, 08:15 |
7 |
|||
|
РешениеAKIV, Parse статический член. Попробуйте через
1 |
I want that when passing a certain enumeration property, the corresponding operator with type checking is output, here is a simple code example
#include <iostream>
#include <typeinfo>
//#include <memory>
enum MessageType : uint16_t
{
Display,
Warning,
Error
};
#define MESSAGE(_MessageType, _Text)
if((_MessageType == Display) && (typeid(_MessageType).name() == MessageType))
{
std::cout<<"Display: "<<_Text;
}
else if((_MessageType == Warning) && (typeid(_MessageType).name() == MessageType))
{
std::cout<<"Warning: "<<_Text;
}
else if ((_MessageType == Warning) && (typeid(_MessageType).name() == MessageType))
{
std::cout<<"Error: "<<_Text;
}
else
return
int main()
{
MESSAGE(Display, "Text!"); // type name is not allowed
return 0;
}
asked Mar 11, 2022 at 7:55
3
std::type_info::name returns a c-string. MessageType is not a string, its the name of a type. You can compare the string returned from typeid(_MessageType).name() to the string returned from typeid(MessageType).name().
However, identifiers starting with leading _ followed by capital letter are reseved. If you use them your code has undefined behavior. Moreover main is not void you must return an int.
And last but not least, you don’t need typeid when you can use constexpr if and std::is_same. A simple function instead of macro would also make it much easier to get a compiler error when the type does not match. Currently your check for the right type is made at runtime. I see no reason to use a macro here, the same could be achieved without one.
answered Mar 11, 2022 at 8:08
2
|
AKIV 0 / 0 / 0 Регистрация: 06.10.2021 Сообщений: 10 |
||||
|
1 |
||||
Ошибка — использование имени типа не допускается06.10.2021, 20:29. Показов 2270. Ответов 6 Метки нет (Все метки)
Ошибка в строках где есть float. И в строке 18 textBox1->Text
__________________ 0 |
|
фрилансер 4430 / 3941 / 858 Регистрация: 11.10.2019 Сообщений: 10,418 |
|
|
06.10.2021, 20:44 |
2 |
|
AKIV, а это точно C++ ? у типа 1 |
|
0 / 0 / 0 Регистрация: 06.10.2021 Сообщений: 10 |
|
|
06.10.2021, 21:52 [ТС] |
3 |
|
Да, это С++. С помощью форм мне нужно создать калькулятор. И готовый код нам дали учителя, а это часть кода, но он не работает… Добавлено через 5 минут 0 |
|
фрилансер 4430 / 3941 / 858 Регистрация: 11.10.2019 Сообщений: 10,418 |
|
|
06.10.2021, 21:53 |
4 |
|
Да, это С++ не похоже ) что-то напутано — либо язык, либо учителя 0 |
|
0 / 0 / 0 Регистрация: 06.10.2021 Сообщений: 10 |
|
|
06.10.2021, 21:58 [ТС] |
5 |
|
Алексей1153, печалька( 0 |
|
11044 / 7600 / 1176 Регистрация: 21.01.2016 Сообщений: 28,582 |
|
|
07.10.2021, 06:23 |
6 |
|
Да, это С++. Нет, это — 0 |
|
OwenGlendower Администратор
15226 / 12265 / 4902 Регистрация: 17.03.2014 Сообщений: 24,867 Записей в блоге: 1 |
||||
|
07.10.2021, 08:15 |
7 |
|||
|
РешениеAKIV, Parse статический член. Попробуйте через
1 |
I want that when passing a certain enumeration property, the corresponding operator with type checking is output, here is a simple code example
#include <iostream>
#include <typeinfo>
//#include <memory>
enum MessageType : uint16_t
{
Display,
Warning,
Error
};
#define MESSAGE(_MessageType, _Text)
if((_MessageType == Display) && (typeid(_MessageType).name() == MessageType))
{
std::cout<<"Display: "<<_Text;
}
else if((_MessageType == Warning) && (typeid(_MessageType).name() == MessageType))
{
std::cout<<"Warning: "<<_Text;
}
else if ((_MessageType == Warning) && (typeid(_MessageType).name() == MessageType))
{
std::cout<<"Error: "<<_Text;
}
else
return
int main()
{
MESSAGE(Display, "Text!"); // type name is not allowed
return 0;
}
asked Mar 11, 2022 at 7:55
3
std::type_info::name returns a c-string. MessageType is not a string, its the name of a type. You can compare the string returned from typeid(_MessageType).name() to the string returned from typeid(MessageType).name().
However, identifiers starting with leading _ followed by capital letter are reseved. If you use them your code has undefined behavior. Moreover main is not void you must return an int.
And last but not least, you don’t need typeid when you can use constexpr if and std::is_same. A simple function instead of macro would also make it much easier to get a compiler error when the type does not match. Currently your check for the right type is made at runtime. I see no reason to use a macro here, the same could be achieved without one.
answered Mar 11, 2022 at 8:08
2
I want that when passing a certain enumeration property, the corresponding operator with type checking is output, here is a simple code example
#include <iostream>
#include <typeinfo>
//#include <memory>
enum MessageType : uint16_t
{
Display,
Warning,
Error
};
#define MESSAGE(_MessageType, _Text)
if((_MessageType == Display) && (typeid(_MessageType).name() == MessageType))
{
std::cout<<"Display: "<<_Text;
}
else if((_MessageType == Warning) && (typeid(_MessageType).name() == MessageType))
{
std::cout<<"Warning: "<<_Text;
}
else if ((_MessageType == Warning) && (typeid(_MessageType).name() == MessageType))
{
std::cout<<"Error: "<<_Text;
}
else
return
int main()
{
MESSAGE(Display, "Text!"); // type name is not allowed
return 0;
}
asked Mar 11, 2022 at 7:55
3
std::type_info::name returns a c-string. MessageType is not a string, its the name of a type. You can compare the string returned from typeid(_MessageType).name() to the string returned from typeid(MessageType).name().
However, identifiers starting with leading _ followed by capital letter are reseved. If you use them your code has undefined behavior. Moreover main is not void you must return an int.
And last but not least, you don’t need typeid when you can use constexpr if and std::is_same. A simple function instead of macro would also make it much easier to get a compiler error when the type does not match. Currently your check for the right type is made at runtime. I see no reason to use a macro here, the same could be achieved without one.
answered Mar 11, 2022 at 8:08
2
Доброго для, elelel.
Пробую разобраться как начать использовать Ваш проект, есть проблемы на этапе запуска примеров.
Пример draw_candles_rt — интеллисенс студии подчеркивает строку 53 в draw_candles_rt.cpp
LUACPP_STATIC_FUNCTION3(OnStop, OnStop, int) с предупреждением «Использование имени типа не допускается». Проект собирается, но запущенный в квике скрипт соответственно падает с воплем «Невозможно найти точку входа в процедуру… «
Где я накосячил, помогите разобраться, пожалуйста.
Собираю проект в VS2017, CMake там интегрирован, базовый пример запускается и работает нормально.
Собственно ругается компилятор на все макросы LUACPP_STATIC_FUNCTIONX, кроме LUACPP_STATIC_FUNCTION2
Проверил с NMake от последней 2017, эту ошибку вызвать не удалось.
Эта проблема присутствует, если сначала сгенерировать проект студии через CMake, а потом компилировать студией? Т.е.
cd c:temp_drawcandlesrt_project
cmake.exe -G "Visual Studio 15 2017" c:pathtoqluacpp_tutorialdraw_candles_rt
Спасибо за мгновенную реакцию 👍
Я пробовал по всякому, даже вручную проект в студии делал.
Интересно, если имя LUACPP_STATIC_FUNCTION3(OnStop, OnStop, int)
поменять вот так:
LUACPP_STATIC_FUNCTION3(OnStop, OnMyStop, int) то в другом примере все собирается и запускается.
Только как изменить LUACPP_STATIC_FUNCTION3(qluacpp_candles_cb, qluacpp_candles_cb, unsigned int)??
В VS2017 есть в меню команда CMake —build , так тоже пробовал..
В вызове макроса LUACPP_STATIC_FUNCTION3(OnStop, OnMyStop, int) первый параметр — название функции, как она будет называться в Lua (OnStop), второй параметр — как называется функция C (в данном случае OnMyStop), которая будет вызываться как обработчик функции Lua, и тип аргумента этой функции (int). В примере функция C тоже называется OnStop и оно никак не должно мешать компиляции. В принципе, вы можете переименовать функцию C qluacpp_candles_cb в удобное вам имя в этом макросе и в том месте C кода где она объявляется/определяется. Но в идеале лучше найти, почему такая ошибка у вас возникает, ее быть не должно.
Но в идеале лучше найти, почему такая ошибка у вас возникает, ее быть не должно.
Согласен 100%
Попробую копать глубже.
class Complex
{
public:
Complex(float = 0.0, float = 0.0); //default constructor that uses default arg. in case no init. are in main
void getComplex(); //get real and imaginary numbers from keyboard
void sum(Complex, Complex); //method to add two complex numbers together
void diff(Complex, Complex); //method to find the difference of two complex numbers
void prod(Complex, Complex); //method to find the product of two complex numbers
void square(Complex, Complex); //method to change each complex number to its square
void printComplex(); //print sum, diff, prod, square and "a+bi" form
private:
float real; //float data member for real number (to be entered in by user)
float imaginary; //float data member for imaginary number (to be entered in by user)
};
void Complex::getComplex()
{
cout << "Enter real number: ";
cin >> real;
cout << "Enter imaginary number: ";
cin >> imaginary;
}
void Complex::sum(Complex, Complex)
{
float sum = 0.0;
sum = real + imaginary;
}
int main()
{
Complex c;
c.getComplex();
c.sum(Complex, Complex);
c.diff(Complex, Complex);
c.prod(Complex, Complex);
c.square(Complex, Complex);
c.printComplex();
return 0;
}
Я получаю сообщение об ошибке c.sum(Complex, Complex); внутри основного (вместе с c.diff, c.prod, а также c.square линии). Ошибка:
type name Complex is not allowed
а также too few arguments in function call
Я не имею права использовать операторы перегрузки для выполнения этой задачи. Что я должен сделать, чтобы решить эту проблему? Код был сокращен, чтобы показать соответствующие части. Еще раз спасибо.
-3
Решение
предположениеМетоды sum, diff и т. д. вашего класса не должны возвращать какой-либо результат или изменять экземпляры класса, которые ему передаются, а только отображают результат операции через std :: cout.
пожалуйста прочитать хотя бы http://www.cplusplus.com/doc/tutorial/functions/ чтобы понять, как значения передаются в функции (или в этом случае методы, см. http://www.cplusplus.com/doc/tutorial/classes/ )
Пока ты можешь объявлять метод только путем записи типов аргументов, вы должны указать идентификаторы в определении:
`
void Complex::sum(Complex c1, Complex c2)
{
}
Затем вы можете получить доступ к членам c1 и c2, как c1.imaginary
Более эффективный способ передать c1 и c2 будет использовать «константные ссылки» const Complex& c1, Тогда никакие копии объектов не будут сделаны.
На самом деле, методы sum, diff, prod можно сделать статическими, так как они не влияют на сложный объект c, который они вызывают в основном (следуя моему предположению). Так и должно быть
Complex::sum(c1, c2);
Если мое предположение неверно, и c.sum() на самом деле будет иметь влияние на с, я не понимаю, почему вам нужно два аргумента для метода. Вы можете просто добавить с1 к с. Тем не менее, метод должен быть вызван Add, Или вы должны вернуть сумму как новый объект, но метод был объявлен как void.
0
Другие решения
Других решений пока нет …
Я пытаюсь использовать АЦП с DMA с использованием STM32F407. Я хочу установить адрес памяти ADCValue в поток DMA x адрес памяти 0. Но я получаю эту ошибку:
type name is not allowed
Эта часть находится в main
unsigned short ADCValue[1];
DMA2_Stream0->M0AR= uint32_t(&ADCValue);
И определение реестра
__IO uint32_t M0AR; /*!< DMA stream x memory 0 address register */
2 ответа
Лучший ответ
Вы бросаете неправильный путь. Так должно быть:
DMA2_Stream0->M0AR = (uint32_t)&ADCValue;
Но поскольку это массив, & также не требуется. Массив автоматически распадется на указатель при использовании этого способа. Так что это будет делать:
DMA2_Stream0->M0AR = (uint32_t)ADCValue;
1
klutt
15 Ноя 2019 в 17:04
Либо:
unsigned short ADCValue ;
DMA2_Stream0->M0AR= (uint32_t)&ADCValue ;
Или
unsigned short ADCValue[1] ;
DMA2_Stream0->M0AR= (uint32_t)ADCValue ;
uint32_t(&ADCValue) или uint32_t(ADCValue) действительны в C ++, но не в C.
0
Clifford
15 Ноя 2019 в 17:19
Recommend Projects
-

ReactA declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-

TypescriptTypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlowAn Open Source Machine Learning Framework for Everyone
-
DjangoThe Web framework for perfectionists with deadlines.
-
LaravelA PHP framework for web artisans
-
D3Bring data to life with SVG, Canvas and HTML. 📊📈🎉
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
FacebookWe are working to build community through open source technology. NB: members must have two-factor auth.
-
MicrosoftOpen source projects and samples from Microsoft.
-
GoogleGoogle ❤️ Open Source for everyone.
-
AlibabaAlibaba Open Source for everyone
-
D3Data-Driven Documents codes.
-
TencentChina tencent open source team.
Я пытаюсь поиграть с новым уроком класса в аргументах указателя, и я хочу, чтобы функции старшие и всеElse принимали указатель x, но когда я пытаюсь вызвать функцию с указателем pAge, он говорит об ошибке: Имя типа не допускается. Что не так?
#include <iostream>
int senior(int* x);
int everyoneElse(int* x);
using namespace std;
int main()
{
int age(0);
int* pAge(&age);
cout<<"How old are you?"<<endl;
cin>>age;
if(age>59)
senior(int* pAge);
else
everyoneElse(int* pAge);
return 0;
}
int senior(int* x)
{
return *x;
}
int everyoneElse(int* x)
{
return *x;
}
22 фев. 2013, в 06:02
Поделиться
Источник
4 ответа
if(age>59)
senior(int* pAge);
else
everyoneElse(int* pAge);
Вы не можете включать имя типа при вызове функции. Изменить на:
if(age>59)
senior(pAge);
else
everyoneElse(pAge);
Josh Petitt
22 фев. 2013, в 05:10
Поделиться
senior(int* pAge);
else
everyoneElse(int* pAge);
заменить
senior(pAge);
else
everyoneElse(pAge);
Boyko Perfanov
22 фев. 2013, в 04:37
Поделиться
Когда вы вызываете функцию, вам не нужно указывать тип параметра, который вы передаете функции:
if(age>59)
senior(pAge);
else
everyoneElse(pAge);
Parametrs следует указывать по типу только в прототипе функции и функции тела (smth вроде этого:)
int senior(int* x)
{
return *x;
}
Anton Kizema
22 фев. 2013, в 06:26
Поделиться
Ещё вопросы
- 1Проект Twitch Streamers freecodecamp — ПРОБЛЕМА ОТОБРАЖЕНИЯ
- 0получить последний завершенный (некоторое условие) идентификатор при подсчете
- 0проверка на соответствие правила не работает
- 1Форма перенаправления в Javascript, передавая значения
- 1Как я могу создать объект с ninject, используя kernel.Get для привязки с определенным атрибутом?
- 0Ember js не обновляет список обновлений из модели в шаблоне
- 0Выбор формы HTML и массивы, PHP
- 1WPF — IsLargeArc = «false» больше не работает
- 1Мемоизированный алгоритм резки стержней
- 0Создать динамический класс с Angular
- 0Как установить значение в конкретном байте?
- 1Использование кучи Java в JTable char [], String и Objects
- 0Как изменить фоновое изображение ТД?
- 0Комбинированные фильтры изотопных переключателей
- 1ActiveUp.Pop3Client Аутентификация результатов по ошибке протокола -ERR. 14
- 0отправка свойства объекта в качестве параметра функции возвращает неопределенное
- 1Дата по умолчанию 1970 в пандах
- 0Событие jquery для документа с пространством имен не работает должным образом
- 1Удалите специальные символы в столбце панд с помощью регулярных выражений
- 0Медленный запрос с наличием на поле вычисления
- 0Jquery: изменить конкретный родной класс, принадлежащий непосредственному родителю.
- 1Ошибка сохранения и получения BLOB-объектов из базы данных SQL Oracle
- 0Установить систему C на Cygwin
- 0Получить номер устройства Android с помощью php
- 1Сканирование 500 для несуществующих URL
- 1Проблема Android / Eclipse
- 1Как вернуться к коду после того, как я закончу со сценой JavaFX
- 1Python читает CSV-строку из сжатого файла
- 0Привязка изображения к сообщению, с которым оно связано
- 0изменение ключа не запускается в файле js
- 0Блокировка таблицы во время транзакции mysql
- 1Python Matplotlib Heatmap Colorbar из прозрачного
- 0Если условие не выполняется, вернуть данные для этого пользователя, иначе другой запрос
- 0MySQL подсчет с ГДЕ и GROUP BY
- 1XmlSerialization из списка объектов смешанного типа в c #
- 0Базовый адрес exe?
- 0Не удается просмотреть результат при объединении 3 таблиц
- 0Выставленный литерал объекта службы Angular не обновляется?
- 1Существует ли встроенный метод InputType или другой способ заставить виджет Android EditText отказываться принимать запятые?
- 0фатальная ошибка C1083: не удается открыть файл включения: ‘tree.h’
- 0Обновить первое вхождение значения во временном интервале
- 0curl_easy_perform возвращает -1, когда сервер недоступен
- 0Расшифровать объект JSON
- 0Сообщение об ошибке загрузки файла Blueimp для недопустимых файлов
- 1Uncaught TypeError: Не удалось выполнить ‘appendChild’ на ‘Node’: параметр 1 не относится к типу ‘Node’. на HTMLButtonElement.comm
- 1Слушатель маркеров диспетчера чертежей Position_Changed
- 0Проблема с компиляцией функции, которая возвращает строку &
- 0C ++ std :: list <T> :: iterator Имеет ли итератор доступ к функциям-членам <T>?
- 0Как получить фрагмент HTML через Applescript с помощью Javascript
- 0Как поместить прямоугольник в середину
Доброго для, elelel.
Пробую разобраться как начать использовать Ваш проект, есть проблемы на этапе запуска примеров.
Пример draw_candles_rt — интеллисенс студии подчеркивает строку 53 в draw_candles_rt.cpp
LUACPP_STATIC_FUNCTION3(OnStop, OnStop, int) с предупреждением «Использование имени типа не допускается». Проект собирается, но запущенный в квике скрипт соответственно падает с воплем «Невозможно найти точку входа в процедуру… «
Где я накосячил, помогите разобраться, пожалуйста.
Собираю проект в VS2017, CMake там интегрирован, базовый пример запускается и работает нормально.
Собственно ругается компилятор на все макросы LUACPP_STATIC_FUNCTIONX, кроме LUACPP_STATIC_FUNCTION2
Проверил с NMake от последней 2017, эту ошибку вызвать не удалось.
Эта проблема присутствует, если сначала сгенерировать проект студии через CMake, а потом компилировать студией? Т.е.
cd c:temp_drawcandlesrt_project
cmake.exe -G "Visual Studio 15 2017" c:pathtoqluacpp_tutorialdraw_candles_rt
Спасибо за мгновенную реакцию 👍 
Я пробовал по всякому, даже вручную проект в студии делал.
Интересно, если имя LUACPP_STATIC_FUNCTION3(OnStop, OnStop, int)
поменять вот так:
LUACPP_STATIC_FUNCTION3(OnStop, OnMyStop, int) то в другом примере все собирается и запускается.
Только как изменить LUACPP_STATIC_FUNCTION3(qluacpp_candles_cb, qluacpp_candles_cb, unsigned int)??
В VS2017 есть в меню команда CMake —build , так тоже пробовал..
В вызове макроса LUACPP_STATIC_FUNCTION3(OnStop, OnMyStop, int) первый параметр — название функции, как она будет называться в Lua (OnStop), второй параметр — как называется функция C (в данном случае OnMyStop), которая будет вызываться как обработчик функции Lua, и тип аргумента этой функции (int). В примере функция C тоже называется OnStop и оно никак не должно мешать компиляции. В принципе, вы можете переименовать функцию C qluacpp_candles_cb в удобное вам имя в этом макросе и в том месте C кода где она объявляется/определяется. Но в идеале лучше найти, почему такая ошибка у вас возникает, ее быть не должно.
Но в идеале лучше найти, почему такая ошибка у вас возникает, ее быть не должно.
Согласен 100%
Попробую копать глубже.
Здесь Form1 — это имя типа (класса) формы.
А обращаться нужно к объекту класса.
Где-то в программе должна быть объявлена переменная класса Form1, например так:
Form1^ form = gcnew Form1();
далее можно будет получить значение textbox1 таким образом:
System::String^ text = form->textbox1->Text;
Если обращение к textbox1 происходит внутри класса Form1, то вместо вместо имени переменной form используется this:
System::String^ text = this->textbox1->Text;
При преобразовании в тип double следует учитывать, что текстовое поле может содержать произвольный текст и не всегда он может быть преобразован в число с плавающей точкой.
Поэтому делать это нужно так:
try
{
auto d = System::Convert::ToDouble(form->textbox1->Text);
}
catch (FormatException e)
{
// Обработка исключения;
}
catch (OverflowException e)
{
// Обработка исключения;
}


Сообщение было отмечено AKIV как решение