我有 3 个源文件。主文件有一个使用if语句定义指针的函数:
main(int dispersalfn) {
if(dispersalfn == 0) {
kernel1 = flatdisp;
} else if(dispersalfn == 1) {
kernel1 = expdisp;
}
[...more stuff...]
}
在main.h我有一个定义kernel1:
arma::vec (*kernel1)(arma::vec d, arma::vec m);
在disp.cpp我有flapdisp和的定义expdisp:
arma::vec flatdisp(arma::vec d, arma::vec m) {
return m;
}
arma::vec expdisp(arma::vec d, arma::vec m) {
return (square(m) / (2*M_PI)) % exp(-m % d);
}
disp.hflatdisp和有相应的定义expdisp:
arma::vec flatdisp(arma::vec d, arma::vec m);
arma::vec expdisp(arma::vec d, arma::vec m);
最后upfun.cpp有一些函数调用kernel1. 中的函数upfun
由 调用main()。
当我编译时,我得到一个错误:
duplicate symbol _kernel in upfun.o and main.o for architecture x86_64
我所有的头文件来源都包含保护,所以我不认为就是这样。这个想法是,当我调用时main(),我包含变量以选择使用哪个函数kernel1。这一直有效,直到我将函数分解为不同的文件。是什么导致了这个错误?