构建当前项目时,链接器出现问题。
它出现的错误如下:
libmiinddynamic.so: undefined reference to `std::basic_ostream<char, std::char_traits<char> >& SparseImplementationLib::operator<< <double, double, SparseImplementationLib::DefaultPtr<double, double> >(std::basic_ostream<char, std::char_traits<char> >&, SparseImplementationLib::AbstractSparseNode<double, double, SparseImplementationLib::DefaultPtr<double, double> > const&)'
这有点奇怪,因为我知道这个方法是在一个肯定被编译的文件中声明的:
namespace SparseImplementationLib {
template <ActivityType,WeightType,ptr_type =
DefaultPtr<ActivityType,WeightType> > class AbstractSparseNode;
// A whole bunch of other methods
//! All derived classes from AbstractSparseNode can use operator<<
template <class ActivityType, class WeightType, class ptr_type>
ostream& operator<<
(
ostream& s,
const AbstractSparseNode<ActivityType,WeightType>& node)
{
node.ToStream(s);
return s;
}
}
为什么会出现此错误?
N.B。这是在Fedora上使用MPICXX编译的,我正在使用CCMAKE。
编辑好了,使用nm我发现了以下内容:
//! All derived classes from AbstractSparseNode can use operator<<
template <class ActivityType, class WeightType, class ptr_type>
ostream& operator<<
(
ostream& s,
const AbstractSparseNode<ActivityType,WeightType>& node)
{
node.ToStream(s);
return s;
}
当它想要这个时:
std::ostream& SparseImplementationLib::operator<< <double, double, SparseImplementationLib::DefaultPtr<double, double> >(std::ostream&, SparseImplementationLib::AbstractSparseNode<double, double, SparseImplementationLib::DefaultPtr<double, double> > const&)
不幸的是,我不知道如何解决这个问题,cus运算符&lt;&lt;只需要2个参数。
(所有_s之前的随机\ s是试图逃避它们,stackoverflow今天有点气质,不会这样做(否则我们会在代码中随机得到可爱的斜体))
答案 0 :(得分:1)
你可以通过上面显示的代码生成对象,看看是吗? 签名确实是你所期望的。
答案 1 :(得分:0)
尝试解析(重新格式化)该行,以便我可以阅读...
libmiinddynamic.so: undefined reference to:
ostream & SparseImplementationLib::operator<<
< double, double, SparseImplementationLib::DefaultPtr<double, double> >
(
ostream &,
SparseImplementationLib::AbstractSparseNode<
double, double, SparseImplementationLib::DefaultPtr<double, double> > const
)
如果我读得对,那么:
以某种方式第二个参数
const AbstractSparseNode&lt; ActivityType,WeightType&gt;&amp; ,例如 const AbstractSparseNode&lt; double,double&gt;&amp;
已成为:
SparseImplementationLib::AbstractSparseNode<
double,
double,
SparseImplementationLib::DefaultPtr<double, double>
> const &
模板参数计数不匹配。您已使用2个模板化参数定义了第二个(模板化)参数,并且您的错误消息指示了3个模板化参数。