【发布时间】:2017-08-21 04:31:09
【问题描述】:
我需要一个函数以我希望看到的格式打印出向量的元素。目前我对vector<double>和vector<std::complex>有单独的函数,如下:
void printvd(boost::ublas::vector<double> V) {
for( int i=0;i<V.size();i++ )
std::cout << V(i) << " ";
}
void printvc(boost::ublas::vector<std::complex> V) {
for( int i=0;i<V.size();i++ )
std::cout << V(i) << " ";
}
我试过用模板,
template<typename T>
void printv(boost::ublas::vector<T > V) {
for( int i=0;i<V.size();i++ )
std::cout << V(i) << " ";
}
但任何调用(如printv<double>(V);)总是以未定义的引用错误结束。
我也面临与矩阵类似的问题 - 任何帮助将不胜感激。如果有人能打趣一下如何在 boost 中使用矩阵表达式,那也很好。
【问题讨论】:
-
未定义的引用意味着你应该在编译时链接来提升。还要确保将模板函数放在头文件中,而不是放在 cpp 源文件中。这是问题的另一个可能原因。
-
好吧,我正在开发一个包含 5 个 cpp 文件(和相应的头文件)并使用 CMake 进行构建的项目。所以我认为问题不在于链接器。
-
当你提出问题时,学会倾听。阅读我评论的第二部分。
-
对什么的未定义引用?你知道templates should be defined in the header files?
-
[OT]:您可能应该通过 const 引用而不是值来获取参数。
标签: c++ templates matrix boost