Russian Qt Forum
Сентябрь 30, 2024, 22:35 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QString и #define  (Прочитано 5295 раз)
virtual_root
Гость
« : Август 25, 2012, 14:09 »

Добрый день. Наверняка, кто-то уже сталкивался с похожей проблемой, подскажите пожалуйста её решение.
У меня в файле config.h объявлены константы:
Код
C++ (Qt)
#ifndef CONFIG_H
#define CONFIG_H
#include <QDir>
 
#define QUOTE(DB_PATH)  = qApp->applicationDirPath()+ QDir::separator();
#define QUOTE(string) DB_NAME = "QBook.sqlite";
 
#endif // CONFIG_H
В другом файле я пытаюсь их использовать(подключила config.h)
Код
C++ (Qt)
QString locationDB(QUOTE(DB_PATH));
но ничего не выходит.. компилятор ругается:
Код:
 ошибка: 'DB_NAME' was not declared in this scope
 ошибка: expected primary-expression before ')' token
 ошибка: expected ';' before ')' token
Записан
virtual_root
Гость
« Ответ #1 : Август 25, 2012, 14:14 »

пробовала так:
Код
C++ (Qt)
#ifndef CONFIG_H
#define CONFIG_H
#include <QDir>
 
#define DB_PATH = qApp->applicationDirPath()+ QDir::separator();
#define DB_NAME = "QBook.sqlite";
 
#endif // CONFIG_H
 
Код
C++ (Qt)
   const char *c = DB_PATH;
но всё равно ругается..
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4744



Просмотр профиля WWW
« Ответ #2 : Август 25, 2012, 14:46 »

мда… учить язык надо, на котором пишешь.
Код
C++ (Qt)
#define DB_PATH (qApp->applicationDirPath() + QDir::separator()) // скобки вокруг на всякий случай, чтобы выражение было единым целым
#define DB_NAME "QBook.sqlite"
но вообще использование макросов в С++ является плохим тоном. лучше написать так:
Код
C++ (Qt)
static const QString kDbName("QBook.sqlite");
 
QString dbPath() { return qApp->applicationDirPath() + QDir::separator(); }
функцию пути в принципе можно написать даже так:
Код
C++ (Qt)
const QString &dbPath()
{
   static QString path;
   if (path.isEmpty())
       path = qApp->applicationDirPath() + QDir::separator();
   return path;
}
« Последнее редактирование: Август 25, 2012, 14:49 от kambala » Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Август 25, 2012, 15:15 »

Чем меньше макросов - тем лучше, там много ловушек. Простой пример

Код
C++ (Qt)
qreal x2 = point.x() * point.x();   // длинновато
 
#define SQR(a) (a * a)
qreal x2 = SQR(point.x());   // так короче
 
Где ошибка?
Записан
virtual_root
Гость
« Ответ #4 : Август 25, 2012, 15:21 »

а оно скомпилировалось без ошибок
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #5 : Август 25, 2012, 15:28 »

а оно скомпилировалось без ошибок
А работать будет?  Улыбающийся
Записан
andrew.k
Гость
« Ответ #6 : Август 25, 2012, 16:24 »

а оно скомпилировалось без ошибок
А работать будет?  Улыбающийся
Будет, но не всегда так, как надо)

Код
C++ (Qt)
#define SQR(a) ((a) * (a))
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.243 секунд. Запросов: 22.