LINUX.ORG.RU

inline-функции и проблемы компоновки


0

0

Проблема: имеется проект (на С++), состоящий из нескольких модулей. В одном модуле описан класс, у которого некоторые методы хочется сделать inline'овыми. Другие модули этот класс используют. Без inline все собирается и работает. Вставляю inline-спецификатор перед определениями нужных функций - при компоновке выдаются ошибки типа "undefined reference to 'SomeClass::SomeFunction'".

Вопрос - что я делаю не так?

anonymous

Ответ на: комментарий от anonymous

Да, я пытался оставить определение inline-методов в *.cc файле. А что, нет способа сделать функцию "неявно" встраиваемой? Мне хотелось сделать заголовочный файл более компактным и аккуратным. Необходимость приводить определение встраиваемых методов в заголовочном файле как-то нарушает концепцию сокрытия реализации от пользователя.

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

Переместил все определения inline-методов в заголовочный файл.

Теперь, если я компилирую модули по отдельности в объектные файлы, а потом пытаюсь собрать все вместе, компоновщик выдает кучу ошибок типа "first defined here" или "multiple definition".

Если собираю все разом (g++ -o some_bin some1.cc some2.cc some3.cc ... ), то все нормпально.

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

Теперь нужно, наверное, еще #ifdef'ов в хеадеры добавить, чтобы они по нескольку раз не включались.

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

Нет, с этим все в порядке. Проблема в чем-то другом.

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