Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [QT4] Ошибка, Ошибка expected',' or '...' before numer 
:(
    Опции темы
ISerg1986
Дата 12.1.2014, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 12.1.2014

Репутация: нет
Всего: нет



Пишу на QT
В коде программы использую define
первые строки программы
Код

#define VID 0xC251
#define PID 0x1701
int init(unsigned int VID, unsigned int PID)
{

можно и так
Код

#define VID 1
#define PID 2

int init(unsigned int VID, unsigned int PID)
{

В любом случае, возникает Ошибка -- expected',' or '...' before numeric constant.
QT жалуется на первые строки.

Вот так
Код

#define VID1 1
#define PID1 2

ошибки не будет

Скажите, в чём тут ошибка? Почему QT не нравятся VID PID, ведь если они заданы некорректно, ошибка должна быть на строке int init(unsigned int VID, unsigned int PID), но не в начале.


PM MAIL   Вверх
borisbn
Дата 12.1.2014, 11:46 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



define - это просто замена одного другим (как будто ты это делаешь в текстовом редакторе - чаще всего Ctrl+H).
Вот это:
Цитата(ISerg1986 @  12.1.2014,  11:34 Найти цитируемый пост)
#define VID 0xC251
#define PID 0x1701
int init(unsigned int VID, unsigned int PID)
{

превращается в это
Код
#define VID 0xC251
#define PID 0x1701
int init(unsigned int 0xC251, unsigned int 0x1701)
{

а так писать нельзя. В параметрах функции должны быть не константы, а названия переменных.
Сделай так:
Код
#define VID 0xC251
#define PID 0x1701
int init(unsigned int a_VID, unsigned int a_PID)
{


Добавлено через 2 минуты и 15 секунд
А теперь поворчу)))
Цитата(ISerg1986 @  12.1.2014,  11:34 Найти цитируемый пост)
Пишу на QT

1) QT - это QuickTime. Я думаю, ты имел в виду Qt.
2) Причём тут Qt - так и не понял
3) По названию темы должно быть понятно, что в ней.
В общем, за оформление - двойка ))


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
ISerg1986
Дата 12.1.2014, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 12.1.2014

Репутация: нет
Всего: нет



Цитата

define - это просто замена одного другим

Да. Я знаю и согласен.

Но в строке 
Код

#define VID 0xC251
#define PID 0x1701

Нет ошибки. Нет синтаксической, нет логической. Всё чинно, благородно )

Ошибка должна быть тут
Код

int init(unsigned int VID, unsigned int PID)
{

Но Qt указывает на первые строки. Обманывает (


Цитата

А теперь поворчу)))
1) QT - это QuickTime. 

Ну и я поворчу )))
1)Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].

Везде QT большими буквами.

2) Показывает ошибку не на той строке. Вводит в заблуждение.

3) В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку - это есть.
Если вопрос актуален только для некоторой версии библиотеки - для всех версий Qt
Проставьте несколько ключевых слов темы - сделано.
В вопросе укажите полную версию версию библиотеки - нет, но и не требуется.
Не забывайте пользоваться кнопкой "Код". -это есть.

Вроде всё есть, фреймворк указан, код есть, полный текст ошибки есть, всё есть.
Твёрдая четвёрка.  smile 

Это сообщение отредактировал(а) ISerg1986 - 12.1.2014, 12:59
PM MAIL   Вверх
kuzulis
Дата 13.1.2014, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 5.9.2007

Репутация: нет
Всего: 1



Цитата

Но Qt указывает на первые строки. Обманывает (


Не Qt, а компилятор. И ничего не обманывает. 
PM MAIL   Вверх
borisbn
Дата 13.1.2014, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



Цитата(ISerg1986 @  12.1.2014,  12:58 Найти цитируемый пост)
Но Qt указывает на первые строки.

Как набор h-ников, lib-ин и dll-ек (Qt) может указывать на ошибки в твоём коде ?

Цитата(ISerg1986 @  12.1.2014,  12:58 Найти цитируемый пост)
Везде QT большими буквами.

и там неправильно


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
bsa
Дата 13.1.2014, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 24
Всего: 196



Цитата(ISerg1986 @  12.1.2014,  13:58 Найти цитируемый пост)
Но в строке
Код
#define VID 0xC251
#define PID 0x1701

Нет ошибки. Нет синтаксической, нет логической. Всё чинно, благородно )
А в  этих строках и нет ошибок.
Тебе уже объяснили, что препроцессор (это такая "утилитка", которая вызывается компилятором перед компиляцией файла, она обрабатывает инструкции начинающиеся с решетки) сильно по барабану, что и чем заменять. Он тупо заменяет в тексте все слова VID и PID на указанные тобой значения. Поэтому, когда компилятор доходит до строки "int init(unsigned int VID, unsigned int PID)", то он видите ее уже не так, а "int init(unsigned int 0xC251, unsigned int 0x1701)".

Чтобы проблем не было все опытные программисты имеют определенные правила именования макросов, переменных, констант и функций. Так вот, в стиле Qt все макросы (#define) должны состоять только из заглавных букв, цифр и знаков подчеркивания. Все остальные элементы пишутся маленькими буквами. Если имя состоит из нескольких слов, то каждое слово начинается с заглавной буквы. Типы и значения перечислений должны начинаться с заглавной буквы, а переменные, константы и функции должны начинаться с маленькой.
Например:
Код
#define VID 0xC251
#define PID 0x1701

int initDevice(unsigned int deviceVid, unsigned int devicePid)
{
...
}

PM   Вверх
vinter
Дата 13.1.2014, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 3
Всего: 56



Цитата(bsa @  13.1.2014,  11:26 Найти цитируемый пост)
Так вот, в стиле Qt все макросы (#define) должны состоять только из заглавных букв, цифр и знаков подчеркивания.

Насколько я знаю, это вообще общий совет. Присущий не только стилю Qt, но вообще стилям  в целом. Это хорошая практика.


--------------------
Мой блог
PM MAIL WWW   Вверх
ISerg1986
Дата 13.1.2014, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 12.1.2014

Репутация: нет
Всего: нет



Код

#include "mainwindow.h"
#include <QApplication>
#include "lib/libusb.h"
#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{

libusb_init(NULL);



    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}



Теперь такая ошибка-" undefined reference to libusb_init@4"

Тут проблема в libusb.h или настройках компилятора?







PM MAIL   Вверх
borisbn
Дата 14.1.2014, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



Цитата(ISerg1986 @  13.1.2014,  21:25 Найти цитируемый пост)
Тут проблема в libusb.h или настройках компилятора?

Ни то, ни то.
Судя по ошибке "undefined reference" компилятор уже закончил работу, а ошибку выдал линковщик, который не видит библиотеки libusb. Для того, чтобы он увидел добавь в .pro файл следующее
Код
unix:LIBS += -L/usr/local/lib -llibusb
win32:LIBS += c:/path/to/libs/libusb.lib

Если тебе не нужна кроссплатформенность, и нужен только linux, то можешь добавить просто
Код
LIBS += -L/usr/local/lib -llibusb




--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
bsa
Дата 14.1.2014, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 24
Всего: 196




M
bsa
Пожалуйста, один топик - один вопрос.

PM   Вверх
ISerg1986
Дата 14.1.2014, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 12.1.2014

Репутация: нет
Всего: нет



Цитата

 который не видит библиотеки libusb

Тоже была такая идея. Но я добавлял LIBS += -L/usr/local/lib Мало опыта и знаний.

Цитата

Пожалуйста, один топик - один вопрос.

Ок.
 Я просто решил задать тут, чтобы не засорять форум моими глупыми вопросами. )
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0830 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.