C++11 模板错误消息:"cannot call member function without object"
C++11 template error message: "cannot call member function without object"
以下是生成用于添加N个向量的表达式模板的代码,但目前我只考虑添加两个向量。
template < typename Operation, typename Va>
struct VectorExpression < Operation, Va >
{
friend Va;
typedef VectorExpression< Operation, Va> This;
const Operation& op;
const Va& vector;
inline VectorExpression ( Operation oper, const Va& first) : op(oper), vector(first) {};
inline auto size() const ->decltype( vector.size() ) {
return vector.size();
};
inline auto operator[]( size_t i ) const
->decltype( vector[i] ) {
return vector[i];
};
};
template < typename Operation, typename Va, typename ... Vs >
struct VectorExpression <Operation, Va, Vs...> : protected VectorExpression< Operation, Vs...>
{
friend Va;
typedef VectorExpression< Operation, Va, Vs...> This;
typedef VectorExpression< Operation, Vs... > Base;
const Operation op;
const Va& vector;
inline VectorExpression ( Operation oper, const Va& first, const Vs&... vs ) : VectorExpression< Operation, Vs...>(oper, vs...), op(oper), vector(first) {};
inline auto size() const ->decltype( vector.size() ) {
return vector.size();
};
inline auto operator[]( size_t i ) const //This line is where the error says it is happening
->decltype( op( vector[i], Base::operator[](i) ) ) {
return op( vector[i], Base::operator[](i) );
};
};
不幸的是,当我试图编译前面的代码时,我得到了以下错误消息:
error: cannot call member function 'decltype (((const VectorExpression<Operation, Va>*)this)->VectorExpression<Operation, Va>::vector[i])
VectorExpression<Operation, Va>::operator[](size_t) const
[with
Operation = adder<std::complex<double>, double>;
Va = Vector<double, false>;
decltype (((const VectorExpression<Operation, Va>*)this)->VectorExpression<Operation, Va>::vector[i]) = const double&; size_t = long unsigned int]' without object
我不确定问题出在哪里。它似乎是operator[]
的一个相当简单的递归定义,将当前对象中的向量与所有基类向量相加。
有什么想法吗?我不相信其余的代码是相关的[Edit:但标题可以在这里找到,测试"main"可以在这里发现,但如果你想看,请告诉我。此外,在C++11中有什么方法可以在调试此类问题的位置打印类型吗?
不能在decltype
中执行Base::operator[](i)
,因为它不在成员函数的主体中;你必须做this->Base::operator[](i)
。
相关文章:
- "error: no matching function for call to"构造函数错误
- 调用专用模板时出错"no matching function for call to [...]"
- 如何处理 c++ 中类实现中的"invalid use of non-static data member"?
- "no matching function for call to 'Vector::Vector'"错误
- 收到错误"invalid use of non-static data member 'stu::n' "
- Centos7 g++ "to_string is not in a member of std"
- 我在 ifstream input_file(文件名)行中收到错误"no matching function to call";
- 模板规范获取'Ambiguous call to overloaded function'
- 从 TVector2 类派生复杂类:"No matching function for call to Complex::Complex()"
- C++复制函数重载导致"must be a nonstatic member function"错误
- Incomings Call with Android Sip stack in Embarcadero C++ bui
- C++ "Invalid use of 'this' in non-member function" ,
- 当初始值设定项是基类名时'initializer does not name a non-static data member or base class'错误
- 学习 c++,编译错误"no matching function for call"
- 使用 GraphicsPath::AddString() 抱怨"class 'GraphicsPath' has no member 'AddString'"
- C++线程"Call to non-static member function without an object argument"
- 为什么这句话"The expression can be used only as the left-hand operand of a member function call"在 [expr.re
- "Cannot call member function ... without object"在未评估的上下文中 - GCC 错误?
- "is not a member of"和"no matching function for call to"错误
- C++11 模板错误消息:"cannot call member function without object"