指向成员函数的指针数组:使其工作
array of pointers to member functions: make it work
在下面的代码中,我得到了错误:
a value of type (double*)(const double& arg) const cannot be assigned to an entity of type pt2calculateA
有什么建议吗?
class myClass {
private:
typedef double (*pt2calculateA)(double);
pt2calculateA calculateA[2];
public:
myClass () {
calculateA[0] = &calculateA1; //->error
calculateA[1] = &calculateA2; //->error
}
double calculateA1(const double& arg) const {
...
}
double calculateA2(const double& arg) const {
...
}
}
myClass::calculateA1()
不是函数;相反,它是成员函数。所以这两种类型自然是不兼容的。
&myClass::calculcateA1
的类型是double (myClass::*)(const double &) const
,它是一个指针到成员函数(PTFM)。请注意,您只能将PTMF与指向对象实例(即myClass*
)的指针一起使用。
如果您更改了typedef,至少可以正确地存储指针:
typedef double (myClass::*pt2calculateA)(const double &) const;
你必须说&myClass::calculateA1
等,以获取地址。
在c++ 11中,你可以在初始化列表中初始化数组:
myClass() : calculateA{&myClass::calculateA1, &myClass::calculateA2} { }
试试这个:
class myClass {
private:
typedef double (myClass::*pt2calculateA)(const double&) const;
pt2calculateA calculateA[2];
public:
myClass () {
calculateA[0] = &myClass::calculateA1;
calculateA[1] = &myClass::calculateA2;
}
double calculateA1(const double& arg) const {
// ...
}
double calculateA2(const double& arg) const {
// ...
}
};
不仅typepedef和实际函数的形参类型不同,而且一个是函数指针,另一个是成员函数指针。myClass::calculateA1
的类型为double (myClass::*)(const double& arg) const
pt2calculateA
被声明为指向函数的指针,而不是指向成员函数的指针。
看到
相关文章:
- 将返回值存储在函数指针数组的指针中是如何工作的?
- std::数组边界检查如何工作?
- 声明C++具有动态大小的数组类型在 Linux 中工作正常,但不能在 Windows 中工作
- 为什么指针在对二维数组进行排序时无法正常工作?
- C++中循环和 C 样式数组的范围工作
- 为什么重载运算符"="动态数组的类上无法正常工作?C++
- 为什么断点显示数组的第二个值是一个大数字?额外学分工作
- 为什么必须动态分配扩展数组才能使此功能正常工作C++
- 我正在努力处理多维数组输入和输出,我管理输入,但是打印无法按计划工作
- 将类型化数组写入子进程 stdin 无法正常工作
- 当删除 [] 指针工作时,为什么无法获得指向的数组大小?
- 如果带有字符数组的语句无法正常工作
- 使用 for 循环打印字符串数组无法正常工作 (C++)
- 字符串文字到 char 数组的转换如何在C++中实际工作
- 澄清了 strcpy() 在像这样初始化字符数组时的工作 *Arr.
- 在 C++ 中使用递归填充 D2 数组,有时工作正常,其他时会引发异常
- 为什么C ,Devstudio,数组索引工作
- 构建对象数组是如何工作的?我被这个例子困住了
- 你不能在 void 指针上使用指针算法,那么 void 指针数组是如何工作的呢?
- 我用于汇总数组元素的 c++ 代码无法正常工作