LINUX.ORG.RU

mysql qt

 , , ,


0

1

Возникает такая ошибка в qt: expected type-specifier QSqlDatabase db = new QSqlDatabase::addDatabase(«QMYSQL»);

а при таком QSqlDatabase db = QSqlDatabase::addDatabase(«QMYSQL»); - правильно, но не работает и выдает такие ошибки: undefined reference to `QSqlDatabase::QSqlDatabase()'. и еще много других подобных

инклуды: #include <QtSql/QSqlDatabase>, #include <QtSql/QSql>

получается то что код который должен работать - не работает. http://pastebin.com/869NM7Bk


Когда получается undefined reference, значит что-то не так со сборкой. Да, ответ уже есть, но это еще может быть из-за недостающей библиотеки или неподключенного хедера.

a1batross ★★★★★
()
Ответ на: комментарий от a1batross

или неподключенного хедера.

Кейс с неподключенным хидером в студию.
Кроме мелокомягких pragm или упоротой структуры проекта где реализация тоже инклудится, притом в клиентский код.

batbko
()
Последнее исправление: batbko (всего исправлений: 1)
Ответ на: комментарий от vzzo

inline функция в хедере не оставляет за собой никаких символов которые могли бы мешаться на этапе линковки.

batbko
()
Ответ на: комментарий от vzzo

Она может не найтись при линковке. Правда тут речь скорее о си, а не си++.

Если это так - пример в студию, конечно возможно, что я чего то не знаю. Но без примера, утверждение выше - голословно чуть менее чем полностью.

Она(inline функция) не может не найтись при линковке, до тех пор пока ты не разделил declaration и definition, при этом, с большой долей вероятности компилятор заставит её перестать быть inline функцией ибо он тебе ничем не обязан и ключевое слово inline - только рекомендация.

Т.к. у тебя будет либо ошибка времени компиляции на вызове этой функции, либо это не inline функция, либо упоротый дизайн обязывает пользователя заincludi'ть ещё и реализацию, что бы компилятор смог сообразить откуда взять тело этой самой inline функции.

Но в последнем случае, у тебя тоже будет ошибка компиляции, но никак не линковки как утверждает товарищ a1batross

А мораль в чём, мораль в том, что прежде чем капитанить

Когда получается undefined reference, значит что-то не так со сборкой.

и потом лепить, что то про хидеры, надо бы, сначала, разобраться из каких этапов эта сборка состоит, и что на этих этапах происходит, а не поучительным тоном пороть хрень:)

Но. Если таки есть кейс - то просветите меня, буду благодарен, однако, пример в студию...

batbko
()
Последнее исправление: batbko (всего исправлений: 1)
Ответ на: комментарий от batbko

Кейс с неподключенным хидером в студию.

да, извиняюсь, перепутал. То было, когда в одном хедере был просто class MyClass, хотя весь класс был в myclass.h.

Моя ошибка, да. =)

a1batross ★★★★★
()
Ответ на: комментарий от batbko

В старых си функция может не иметь declaration. Пример:

int main() {
    return f();
}

int f() {
    return 1;
}
Сгенерирует воргинг на c99/c11, и не сгенерирует ворнинг на c89. Соотсветственно, inline-функция в каком-нибудь header.h, который не был заинклюжен, не вызовет ошибки на этапе компиляции, а вызовет ошибку на этапе линковки.

[boris@mbp ~]$ gcc-4.8 -o test test.c
Undefined symbols for architecture x86_64:
  "_f", referenced from:
      _main in ccFFgr8T.o
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status
[boris@mbp ~]$ cat test.c
int main() {
	return f();
}
vzzo ★★★
()
Последнее исправление: vzzo (всего исправлений: 1)
Ответ на: комментарий от vzzo

В старых си функция может не иметь declaration.

На сколько я знаю, всё таки дело обстоит не совсем так - просто в C вызов функции может трактоваться как declaration, ибо default int и всё такое.

Но, в целом, пример канает:) Хотя и не стоит называть такие функции inline - ибо до вроде c99 и не было такого понятия в C. А что C'шный компиль делает из функций без ключевого слова - навскидку я х3, но по идее это по факту то же разделение declaration/definition, которое я назвал упоротым, но тут лютая доля упоротости будет лежать конечно же на сишечке:) Хотя в либах, лучше всё же так не делать, в публичных заголовках по крайней мере.

Ну и таки да, речь шла конечно, больше о плюсах.

batbko
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.