Как прочитать этот qtstring в qsqlquery.exec - PullRequest
0 голосов
/ 19 ноября 2011

Я изучаю qtsql, но наткнулся на эту qtstring в qtsql :: query.exec ()

Я никогда раньше не видел эту строку в C ++.

Может кто-нибудь объяснить, почему есть много цитат? И как это читать? Это одна строка или пять строк? Если есть пять строк, почему между ними нет разделителей, таких как запятая? Кроме того, query.exec ожидает const & QTstring. Так что, если это одна строка, это то же самое, что «создать таблицу person (идентификатор целочисленного первичного ключа, имя varchar (20), фамилия varchar (30), возраст целое)»?

ret = query.exec("create table person "
              "(id integer primary key, "
              "firstname varchar(20), "
              "lastname varchar(30), "
              "age integer)");

Заранее спасибо.


Он не компилируется, так как я получаю эту ошибку

[100%] Создание объекта CXX CMakeFiles / utest_main.dir / utest_main.cpp.o /Users/chen/GitRepo/TickDatabase/utest_main.cpp: в функции 'int main ()': / Users / chen / GitRepo / TickDatabase / utest_main.cpp: 25: ошибка: «firstname» не было объявлено в этой области /Users/chen/GitRepo/TickDatabase/utest_main.cpp:25: error: «lastname» не было объявлено в этой области / Users / chen / GitRepo / TickDatabase / utest_main.cpp: 25: ошибка: «возраст» не был объявлен в этой области: make [2]: * [CMakeFiles / utest_main.dir / utest_main.cpp.o] Ошибка 1, make [1]: * [CMakeFiles / utest_main.dir / all] Ошибка

Но это также не похоже на ошибку, поскольку оба эти сайта ссылаются на этот синтаксис:

http://www.developer.nokia.com/Community/Wiki/CS001505_-_Creating_a_database_table_in_Qt

http://doc.qt.nokia.com/stable/sql-cachedtable.html

Кто-нибудь есть идеи?

Ответы [ 2 ]

1 голос
/ 19 ноября 2011

Если два строковых литерала разделены только пробелами, то они объединяются в одну строку.Это часть стандартов C и C ++, если я не ошибаюсь.

Редактировать Стандарт для C можно найти здесь .Соответствующей частью является раздел 6.4.5 (точно названный «Строковые литералы»), параграф 4. Я цитирую:

В фазе перевода 6, многобайтовые последовательности символов, заданные любой последовательностью смежного символа и широкимСтроковые литеральные токены объединяются в одну многобайтовую последовательность символов.

Далее в параграфе 7 приведен пример:

ПРИМЕР Эта пара смежных строковых литералов символов

"\x12" "3"

создает односимвольный строковый литерал, содержащий два символа со значениями '\ x12' и '3', поскольку escape-последовательности преобразуются в отдельные члены набора символов выполнения непосредственно перед конкатенацией литералов смежных строк.

В стандарте C ++ должен быть похожий текст, но у меня его пока нет, поэтому я не могу сказать, какой раздел.

Редактировать 2 Глядя наошибки в вопросе, я бы сказал, что где-то в реальном источнике есть пропущенные или лишние двойные кавычки ".

0 голосов
/ 19 ноября 2011

Это одна строка, которая означает "create table person (id integer primary key, firstname varchar(20), lastname varchar(30), age integer)".Но вы можете видеть, что это слишком долго, чтобы попасть в одну строку.Поэтому он разбивается на несколько строк с помощью "" (открывающие / заключающие в кавычки закрывающие кавычки).В этом случае вы можете использовать разрыв строки внутри строки в коде, чтобы улучшить его читабельность.Если вы не вставляете эти символы и просто разбиваете строку, используя разрывы строк, ваш код не будет компилироваться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...