クラス内の特定のものをより柔軟に調整できるように、関数にファンクターを与えようとしています。ここにいくつかのコードがあります:
struct BC {
real operator()(real x, real y, real z) {
return sin(2 * M_PI * x) * sin(2 * M_PI * y) * sin(2 * M_PI * z);
}
};
int main() {
// stuff
subgrid.initBC(BC(), subdomain);
}
Subgrid.cpp ファイルの initBC の定義は次のとおりです。
template <class Fun>
void Subgrid::initBC(Fun f, const Subdomain& subdomain) {
f(1, 2, 3); // more or less, just simple usage like that
}
そして、Subgrid.hpp 内にある宣言:
template <class Fun> void initBC(Fun f, const Subdomain & subdomain );
コンパイルしてリンクしようとすると、次のエラーメッセージが表示されます
Undefined symbols:
"void Subgrid::initBC<BC>(BC, Subdomain const&)", referenced from:
_main in main.o
ld: symbol(s) not found
ここで何が機能していないのかわかりません。おそらくテンプレートの問題が原因だと思いますが、それが何であるかはわかりません。助けていただければ幸いです。コード スニペットで十分であることを願っています。他のすべてのコードは、この問題とは無関係である必要があります。