使用g ++获取“未定义的参考错误消息”,但应明确包含函数

时间:2019-10-08 14:02:40

标签: c++ c++11 templates compiler-errors

我有一个包含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类型的,因此编译器应了解此模板是什么。那是对的吗?我想念什么,还是什么?我该如何解决?

0 个答案:

没有答案