我有一个包含5个文件的C ++项目:
sde.cpp(包含main()),sde_library.cpp,sde_library.hpp,num_vector.cpp和num_vector.hpp。我正在尝试将它们与命令一起编译
g++ sde.cpp sde_library.cpp num_vector.cpp -o sde.out
主要功能包含两行
int test = 0;
vector<vector<double>> avg_trace = RK_all(num_traces, many_traces, t_interval, y0, dt, test);
此函数在sde_library.hpp中声明为
template<typename eq_params> std::vector<std::vector<double>> RK_all(unsigned int num_traces,
bool many_traces, std::vector<double> t_interval, std::vector<double> y0, double dt, eq_params args);
该实现可在sde_library.cpp上找到。但是,在编译时出现以下链接错误消息:
/tmp/ccZkiXkj.o: In function `main':
sde.cpp:(.text.startup+0xd5): undefined reference to `std::vector<std::vector<double, std::allocator<double> >, std::allocator<std::vector<double, std::allocator<double> > > > RK_all<int>(unsigned int, bool, std::vector<double, std::allocator<double> >, std::vector<double, std::allocator<double> >, double, int)'
collect2: error: ld returned 1 exit status
我以为这个错误的出现是由于我向函数RK_all引入了模板(在我介绍它正确运行之前);我已经看到“未定义的引用”随模板一起出现,这是我第一次使用它们。但是,我主要是在明确声明eq_params
是int类型的,因此编译器应了解此模板是什么。那是对的吗?我想念什么,还是什么?我该如何解决?