注册 登录
编程论坛 C++教室

请教一道C++题目

durongjian 发布于 2008-11-11 19:24, 815 次点击
#include <iostream>
using namespace std;
class Time
{
public:
    Time(int,int,int);
    int hour;
    int minute;
    int sec;
    void get_time(int);
    void output_minute();
};
Time::Time(int h,int m,int s)
{hour=h;minute=m;sec=s;}
void Time::get_time(int a)
{cout<<a<<","<<hour<<","<<minute<<","<<sec<<endl;}
void Time::output_minute()
{cout<<minute<<endl;}
void main()
{
    Time t1(10,13,56);
    int *p1=&t1.hour;
    cout<<*p1<<endl;
    t1.get_time(2008);
    Time *p2=&t1;
    p2->get_time(2008);
    void (Time::*p3)();
    p3=&Time::get_time(2008);(t1.*p3)();
    p3=&Time::output_minute;(t1.*p3)();
}
编译时出现如下错误,不明白,望高手指点
error C2352: 'Time::get_time' : illegal call of non-static member function
4 回复
#2
alien732008-11-11 19:30
get_time不是静态函数,怎么能用类名加域操作符调用呢。。。。
#3
durongjian2008-11-11 19:48
回复 2# 的帖子
非常感谢你的回复,但我还是不太懂,我如果把get_time函数的参数去掉后就可以了,为什么会这样,去掉后它仍然不是静态函数。
#include <iostream>
using namespace std;
class Time
{
public:
    Time(int,int,int);
    int hour;
    int minute;
    int sec;
    void get_time();
    void output_minute();
};
Time::Time(int h,int m,int s)
{hour=h;minute=m;sec=s;}
void Time::get_time()
{cout<<hour<<","<<minute<<","<<sec<<endl;}
void Time::output_minute()
{cout<<minute<<endl;}
void main()
{
    Time t1(10,13,56);
    int *p1=&t1.hour;
    cout<<*p1<<endl;
    t1.get_time();
    Time *p2=&t1;
    p2->get_time();
    void (Time::*p3)();
    p3=&Time::get_time;(t1.*p3)();
    p3=&Time::output_minute;(t1.*p3)();
}
#4
tls4113232008-11-11 21:30
#5
牙子2008-11-11 22:05
菜鸟帮你解题
因为出现函数指针赋值错误,就是语法错误;
p3=&Time::get_time(2008);本句话的意思是Time 类中有一个get_time(2008);的函数
其实Time 类中的函数是 get_time();
所以p3=&Time::get_time;就正确了;
 ***
呵呵本人刚自学C++到这里所有就大言不惭了,如果有错请认真批评;谢谢
1