3 개의 소스 파일이 있습니다. main.h
에서함수 포인터에서 C++ 중복 기호
main(int dispersalfn) {
if(dispersalfn == 0) {
kernel1 = flatdisp;
} else if(dispersalfn == 1) {
kernel1 = expdisp;
}
[...more stuff...]
}
내가 kernel1
에 대한 정의가 있습니다 : 주요 파일 포인터를 정의 할 if
문을 사용하는 기능이있다 disp.cpp
에서
arma::vec (*kernel1)(arma::vec d, arma::vec m);
을 내가 가진 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