Как разнести по файлам функцию с++
Столкнулся с проблемой, как правильно разнести объявление и реализацию фунции между между заголовочным файлом .h и .cpp. Сейчас есть такая структура программы.
.h файл
namespace problem {
class_1 {}
class_2 {}
...
static std::vector<int> coord;
static void solve(double&x, double&y) {
//transform coord, use class_1, class_2;
}
}
в .сpр вынесена реализация всех классов. Когда выношу реализацию функции solve в .cpp, то получаю ошибку при вызове функции problem::solve(x, y) (вызов происходит в main.cpp):
undefined reference to `problem::solve(double&, double&)'
collect2: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.
Не могу разобраться в чём проблема.
Ответы (1 шт):
У вас функция помечена как статическая, это означает (для простых функций, для членов класса и переменных значение этого ключевого слова другое) что она доступна только в пределах той же единицы трансляции, т.е. того же cpp файла, а вы ее вызываете из main.cpp.
При этом когда вы убираете реализацию в .h, при включении этого заголовочного файла в main.cpp, реализация этой функции фактически оказывается в файле main.cpp, то есть в том же файле, что и ее вызов, и ее статичности не мешает вызову.
Чтобы функцию можно было вызвать из main, уберите static