首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过指向模板方法的指针调用模板方法

通过指向模板方法的指针调用模板方法
EN

Stack Overflow用户
提问于 2016-09-25 18:24:21
回答 1查看 214关注 0票数 2

我有下一个错误:

C2064项不计算为带有1个参数的函数(第33行)

它在调用函数"param.c1(x)“时失败。但是为什么呢?它似乎无法推断函数"c1_1_order_()“接受一个参数,或者我在函数"config_1_order()”中做了错误的赋值。

文件"Header.h“

代码语言:javascript
复制
#include <vector>
using std::vector;

class TMA {
private:
  double(*p)(double);

  template<class U>
  struct SLAU_params {
  private:
    TMA * obj;

    U c1_1_order_(double x) {
      return  obj->p(x);
    }

    void config_1_order() {
      c1 = &TMA::SLAU_params<U>::c1_1_order_;
    }
  public:
    SLAU_params(TMA * obj) :obj(obj) {
      config_1_order();
    }

    U(TMA::SLAU_params<U>::* c1)(double);
  };
public:
  TMA(double(*p)(double)) :p(p) {}

  template<class U>
  vector<U> TMA_solve(U h) {
    double x = h;
    SLAU_params<U> param(this);
    param.c1(x);
    vector <U> rez;
    return rez;
  }
};

"Source.cpp“

代码语言:javascript
复制
#include "Header.h"
double p(double x) { return x; }
int main() {
  TMA a(p);
  double h = 1.0;
  a.TMA_solve(h);
  return 0;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-25 18:32:22

代码语言:javascript
复制
param.c1(x);

c1是一个类方法指针。类方法指针不是函数指针,它本身不能调用。必须在指向有关类的实例/指针上使用.*->*运算符调用类方法指针。例如:

代码语言:javascript
复制
(param.*(param.c1))(x);

这是否是正确的应用程序,或者是否必须通过指针调用不同对象的方法,就像这样,您需要弄清楚。

所示代码还存在其他问题:

代码语言:javascript
复制
 U c1_1_order_(double) {
      return  obj->p(x);
    }

这里没有声明对象x

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39690280

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档