我有 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.h
flatdisp
和有相应的定义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
。这一直有效,直到我将函数分解为不同的文件。是什么导致了这个错误?