以下是用於生成添加N個向量的表達式模板的代碼,但目前我只查看添加兩個向量。C++ 11模板錯誤消息:「無法調用沒有對象的成員函數」
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[]
,將當前對象中的矢量與所有基類矢量相加。
任何想法?我不相信其餘的代碼是相關的[編輯:但標題可以找到here,和測試「主」可以找到here,但如果你想看到它,讓我知道。另外,在C++ 11中是否有任何方法來打印出位置類型來調試這類問題?
如果您可以提供一些我們可以嘗試在我們的環境中編譯的完整代碼(包括您實例化這些模板的方式,如果您這樣做),那將是一件好事。這是部分的,並且可能很難發現錯誤,而不使用代碼 – 2013-03-10 21:52:46
@AndyProwl:完成,我添加了指向頭文件和實例化文件的鏈接。 – 2013-03-10 21:58:43
@SethCarnegie:很好!我不會發現那一個 – 2013-03-10 22:03:38