【发布时间】:2015-05-14 13:51:11
【问题描述】:
我有一个包含函数指针的类,它将根据构造函数的输入指向不同的函数。当我从类中的函数中使用函数指针时,这很有效,但是当我尝试从另一个类中构造的对象中使用它时,我遇到了麻烦。这里要说明的是类头myclass.h:
using namespace std;
#include <cstdlib>
#include <iostream>
#ifndef MYCLASS_H
#define MYCLASS_H
class myclass{
public:
void (myclass::*genericfunc)();
void specialfunc1();
void specialfunc2();
void rungeneric();
myclass(int fno) {
if(fno==1) genericfunc=&myclass::specialfunc1;
else if(fno==2) genericfunc=&myclass::specialfunc2;
else {
cerr << "ERROR: myclass must be constructed with integer input 1 or 2" << endl;
throw std::exception();
}
}
};
#endif
以及类源myclass.cpp
#include "myclass.h"
void myclass::specialfunc1() {cout << "Running function 1" << endl;}
void myclass::specialfunc2() {cout << "Running function 2" << endl;}
void myclass::rungeneric() {
(this->*genericfunc)();
}
最后是程序testmyclass.cpp:
using namespace std;
#include "myclass.h"
int main() {
myclass classobject1(1);
classobject1.rungeneric();
myclass classobject2(2);
(classobject2->*genericfunc)();
}
我使用g++ -c myclass.cpp 和g++ testmyclass.cpp myclass.o -o testmyclass 进行编译。编译问题出现在main函数的最后一行:
testmyclass.cpp: In function ‘int main()’:
testmyclass.cpp:14:18: error: ‘genericfunc’ was not declared in this scope
(classobject2->*genericfunc)();
【问题讨论】:
-
(classobject2.*classobject2.genericfunc)(); -
它有效;如果你想让它成为答案,我会接受。顺便说一句,我看起来很奇怪,但我在这里很绿..
-
您正在通过对象访问成员,而不是指针。
-
所以使用 (classobject2.*genericfunc)() ;
标签: c++ class object constructor function-pointers