c++模板中的函数指针错误C2064
c++ Error C2064 for function pointer in C++ template
如果我编译下面的代码,我将得到一个
"错误C2064: term不计算为带有两个参数的函数"
在doOpp()
方法中。如果我将q = f(p, i);
更改为q = add(p, i);
,一切都会编译得很好(add()
是doOpp()
方法中的第二个参数)。我已经尝试了几个解决方案,但似乎没有奏效。
template <class T = double>
class Points {
public:
Points(void);
Points(Point3d<T> *, int);
Points(T *, int);
Points(Points &);
~Points(void);
void clear();
int size();
void push_back(Point3d<T> &);
typename vector<Point3d<T>>::iterator begin(void){return pnts.begin();};
typename vector<Point3d<T>>::iterator end(void){return pnts.end();};
void assign(Point3d<T> *, int);
void assign(T *, int);
void assign(Points &);
Points valid(void);
Points valid(int *);
bool setValid(int, bool);
int validSize();
// Pointer to operator function prototype
typedef Point3d<T> (__thiscall Points<T>::*oppFunc) (Points<T> &, int);
Points operator=(Points &);
// + Operator method
Points operator+(Points &p){return doOpp(p, &Points<T>::add);};
Points operator-(Points &){return doOpp(p, &Points<T>::sub);};
Points operator*(Points &){return doOpp(p, &Points<T>::mlt);};;
private:
Points(int);
void assign(int);
int assign(Points &, Points &);
vector<Point3d<T>> pnts;
bool isSameSize(Points<T> &, char *);
// General purpose operator function
Points doOpp(Points<T> &, oppFunc);
// Addition method called by doOpp
Point3d<T> add(Points &p, int i) {return pnts[i] + p.pnts[i];}
Point3d<T> sub(Points &p, int i) {return pnts[i] - p.pnts[i];}
Point3d<T> mlt(Points &p, int i) {return pnts[i] * p.pnts[i];}
};
template <class T> int
Points<T>::assign(Points &p1, Points &p2) {
int s = min(p1.size(), p2.size());
assign(s);
return s;
}
template <class T> bool
Points<T>::isSameSize(Points &p, char *s) {
bool same = (pnts.size() == p.pnts.size());
#ifndef POINTS_NO_THROW
if (!same) {
PointsException e;
e.setMessage((string) s + " source sizes not equal");
throw e;
}
#endif
return same;
}
template <class T> Points<T>
Points<T>::doOpp(Points &p, oppFunc f) {
isSameSize(p, __FUNCTION__);
Points<T> r;
int s = r.assign(*this, p);
Point3d<T> q;
for (int i = 0; i < s; i++) {
q = f(p, i); // Causes error C2064 but q = add(p, i); works fine
}
return r;
}
int
main () {
Points<> p, q;
q.assign(a, 4);
p = q + q;
return 1;
}
由于oppFunc f
是成员函数指针,因此应该使用特殊的语法来通过成员函数指针进行调用:
q = (this->*f)(p, i);
Points operator-(Points &){return doOpp(p, &Points<T>::sub);};
不是:
Points operator-(Points &p){return doOpp(p, &Points<T>::sub);}; // note the p argument
相关文章:
- 为什么我在空指针错误(链表)中获取成员访问权限
- std::函数指针错误:无法将 &A::a 转换为类型 std::function<>&&
- 为什么我得到 munmap_chunk():无效的指针:错误
- 成员模板函数指针错误
- 删除指针时,未分配被释放的 C++ 指针错误
- Visual Studio 中的"指向引用的指针"错误不会按发生位置的文件名显示
- C++数组指针错误无法将“int*”转换为“int**”
- C++ 通过函数指针错误调用成员函数
- 从 BST 中删除元素(指针错误)
- 随机生成的多维布尔指针错误
- 在测试中使用unique_ptr时指针错误无效
- 使用 malloc 而不是 new 会导致 free():指针错误无效
- 非标准语法;使用 '&' 创建指向成员的指针错误,将成员函数分配给向量时出错
- 抽象类和唯一指针 c++ 错误
- 返回函数指针错误而不带类型定义
- 练习中出现空指针错误
- 指针错误导致的分段错误(简单..)
- free():C++中的指针错误无效
- 使用布尔值数组"表达式必须具有指向对象类型的指针"错误C++
- 指针错误的C 数组