crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Не собирается программа, multiple definition
Awesome
  опции профиля:
сообщение 26.1.2011, 22:07
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 7
Регистрация: 26.1.2011
Пользователь №: 2370

Спасибо сказали: 0 раз(а)




Репутация:   0  


Написал свой класс, подключил к программе.
При попытке запустить в консоли сборки вылезают ошибки вида:
tmp/obj/debug_shared/имя_класса.o:C:\Qt\2010.05\qt\имя_проекта/../../include/QtCore/../../src/corelib/global/qglobal.h:1381: multiple definition of `имя_класса::имя_метода()'
Ошибок много, столько же, сколько у меня методов в классе, кроме тех, которые определены в объявлении (inline)
Ну и в конце ещё collect2: ld returned 1 exit status
Помогите пожалуйста, не могу разобраться.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Гость_Гость_FantasyOR_*_*
сообщение 26.3.2012, 16:55
Сообщение #2





Гости








    


Раскрывающийся текст

{
    QString str = ui->lineEditTest->text();
    //QString str = "строка на русском"; //если убрать этот коммент, то функция нормально переведет эту строку
    QString result = "";
    QHash<QChar,QString> trHash;
    trHash.insert('а',"a");    trHash.insert('б',"b");
    trHash.insert('в',"v");    trHash.insert('г',"g");
    trHash.insert('д',"d");    trHash.insert('е',"ye");
    trHash.insert('ё',"yo");    trHash.insert('ж',"zh");
    trHash.insert('з',"z");    trHash.insert('и',"i");
    trHash.insert('й',"y");    trHash.insert('к',"k");
    trHash.insert('л',"l");    trHash.insert('м',"m");
    trHash.insert('н',"n");    trHash.insert('о',"o");
    trHash.insert('п',"p");    trHash.insert('р',"r");
    trHash.insert('с',"s");    trHash.insert('т',"t");
    trHash.insert('у',"u");    trHash.insert('ф',"f");
    trHash.insert('х',"kh");    trHash.insert('ц',"c");
    trHash.insert('ч',"ch");    trHash.insert('ш',"sh");
    trHash.insert('щ',"sch");    trHash.insert('ъ',"");
    trHash.insert('ы',"y");    trHash.insert('ь',"");
    trHash.insert('э',"e");    trHash.insert('ю',"yu");
    trHash.insert('я',"ya");
    str = str.toLower();
    for(int i=0;i<str.size();i++) {
        qDebug() << str.at(i);
        if(trHash.contains(str.at(i)) == true){
            result.append(trHash.value(str.at(i)));
        }
        else result.append(str.at(i));
    }
    ui->lineEditTest->setText(result);
}





Не сочтите за некрофилию
Стиль программирования if(trHash.contains(str.at(i)) == true) в Вашем коде выше (взят был из http://www.forum.crossplatform.ru/lofivers....php/t3712.html ) недопустим. Вы в булевом условии сравниваете ответ с истиной?!?!?!?!

надеюсь за год , Вы исправили эту свою привычку.
посмотрите внимательно что получается:
если ( (правда == правда)=правда )...
если ( (ложь == правда)=ложь )...

у Вас ответ и так правда или ложь, зачем её сравнивать ещё раз?
должно быть:
if ( trHash.contains(str.at(i)) ) ... contains - возвращает bool.

bool - это синтетический тип на самом деле это int
0 = false
<0> = true - любое не нулевое значение, как положительное, так и отрицательное даст true

if (1)... - true пойдёт в ветвь then
if (-1)... - true пойдёт в ветвь then
if (-909090)... - true пойдёт в ветвь then
if (0)... - false пойдёт в ветвь else


таким образом можно делать что-то вроде:
if ( массив.size() )..., но конечно не стоит у массива(не только QVector, но и QList, и QStringList...) есть isEmpty()

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

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.4.2024, 1:45