Название: multiple definition(глюк,мой или Qt ?) Отправлено: Konstantin от Январь 31, 2006, 19:59 Начал писать небольшой проектик(мой первый с qt и вообще GUI).
Всё собирается , хотел добавить разпознавания типа текстового файла(чисто спец. вещь) datatypes.h Код:
При добавлении любого из закомментированных обьявлений(Нужно только последнее,остальное для пробы) выдаёт следующее: Код:
Я в непонятках , имена все попеременял,в qchar.h даже заглянул :) Не могу найти причину. Помогите!!! Название: multiple definition(глюк,мой или Qt ?) Отправлено: yshurik от Январь 31, 2006, 20:20 Файл инклудится пару раз в разные src файлы -> пару раз определяется переменная -> линкер не знает в каком .o правильная ссылка
Название: multiple definition(глюк,мой или Qt ?) Отправлено: Dendy от Январь 31, 2006, 21:15 Файл инклудится больше одного раза, что в принципе нормально.
Проблема с определением переменньІх: 1. Константная переменная должна бьІть определена в заголовочнике так: Код: const char * word = "abcde"; // WRONG Теперь на етапе компиляции компилер заюзает для каждого из cpp-файлов свою константу в пределах етого файла (что и означает слово static), но в результате оптимизаций статические данньІе в коде будут одни. 2. Неконстантная переменная должна бьІть только обьявлена в заголовочнике с помощью ключевого слова extern, определена же - в cpp-файле: Код: QString bla_bla_bla; // WRONG В одном и только в одном заголовочнике должно бьІть её определение, иначе линкер честно обругается: один из cpp Код: QString bla_bla_bla; Название: multiple definition(глюк,мой или Qt ?) Отправлено: KADABRA от Февраль 01, 2006, 11:20 Код:
добавлено спустя 1 минуту: Konstantin Надо хоть с С++ разбиратся :) Название: multiple definition(глюк,мой или Qt ?) Отправлено: Konstantin от Февраль 01, 2006, 13:18 Цитата: "KADABRA" Код:
добавлено спустя 1 минуту: Konstantin Надо хоть с С++ разбиратся :) Так вот пытаюсь разобраться. Заглянул в Страуструпа. Он не рекомендует определять данные(не конст.) в заголовниках типа Код:
Только обьявления или определения констант. Код:
Обьявление с ключевым словом static так же не рекомендуется использовать,кроме как внутри функций и классов. Название: multiple definition(глюк,мой или Qt ?) Отправлено: Вудруф от Февраль 07, 2006, 11:51 Хуже того, для статических данных компиляторы иногда забывают вызывать конструкторы :(
|