我有一個3個源文件。主要文件有使用if
語句來定義一個指針的函數:函數指針的C++重複符號
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
有相應的de爲flatdisp
和expdisp
finitions:
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
。這工作,直到我把我的功能分解成不同的文件。什麼導致這個錯誤?
似乎是一個鏈接器問題你使用#ifndef HEADER_H #define HEADER_H你應該提供一個工作示例 – Leosar