Russian Qt Forum

Программирование => С/C++ => Тема начата: cya-st от Март 04, 2010, 15:05



Название: Проблема с namespace
Отправлено: cya-st от Март 04, 2010, 15:05
Всем привет.
Есть хидер:
Код:
#ifndef UTILS_H
#define UTILS_H

namespace Utils
{
    static void Func1(int a)
    {
        //Something
    }

    static QString Func2(int iType)
    {
        return something;
    }
}

#endif // UTILS_H
Вызываю функции:
Код:
...
Utils::Func1(0);
...
Utils::Func2(25);
...
Но у меня возникает предупреждение компиляции:
Код:
warning: 'void Utils::Func1(int)' defined but not used
warning: 'QString Utils::Func2(int)' defined but not used
Подскажите пожалуйста как с этим можно бороться?


Название: Re: Проблема с namespace
Отправлено: Akaiten от Март 04, 2010, 15:27
Так как они определены в .h файле и ещё static, то все .cpp файлы, которые явно или неявно включают .h файл, получают свою собственную копию этих функций. Но не везде они используются, о чём собственно и предупреждает компилятор.


Название: Re: Проблема с namespace
Отправлено: Igors от Март 04, 2010, 15:30
Не писать static если планируете вызывать Utils::Func1(0) из др. файла. Оставьте в h файле только объявления, тела перенесите в Utils.cpp. Альтернатива: заменить static на inline. Если есть Utils-переменные они должны быть объявлены как extern в Utils.h


Название: Re: Проблема с namespace
Отправлено: cya-st от Март 04, 2010, 16:15
Реализацию перенес Utils.cpp static убрал. Появляется ошибка:
Код:
:-1: error: collect2: ld returned 1 exit status


Название: Re: Проблема с namespace
Отправлено: BRE от Март 04, 2010, 16:21
Utils.cpp в проект добавил?


Название: Re: Проблема с namespace
Отправлено: cya-st от Март 04, 2010, 16:44
После добавления Utils.cpp в проект, проблема решилась. Всем спасибо за ответы.