0

クラス内の特定のものをより柔軟に調整できるように、関数にファンクターを与えようとしています。ここにいくつかのコードがあります:

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

ここで何が機能していないのかわかりません。おそらくテンプレートの問題が原因だと思いますが、それが何であるかはわかりません。助けていただければ幸いです。コード スニペットで十分であることを願っています。他のすべてのコードは、この問題とは無関係である必要があります。

4

0 に答える 0