| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3954 人关注过本帖
标题:illegal call of non-static member function
只看楼主 加入收藏
karlzhouzhi
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2005-12-25
收藏
 问题点数:0 回复次数:5 
illegal call of non-static member function
我定义了三个文件
搜索更多相关主题的帖子: member function call illegal 
2006-03-11 11:27
karlzhouzhi
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2005-12-25
收藏
得分:0 
以下是引用karlzhouzhi在2006-3-11 11:27:00的发言:
我定义了三个文件

file1:date_header.h

namespace Chrono
{
class Date
{
public://公共界面

enum Month{jan=1,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec};
........

Date(int dd=0,Month mm=Month(0),int yy=0);//0的意思是“取默认值”

.......
private:
int d,y; //表示
Month m;
static Date default_date;
};
}

file2:date_implement.cpp

#include"date_header.h"
#include<iostream>

using namespace std;
using namespace Chrono;

Date Date::default_date(22,feb,1901);//初始化static数据成员

Date::Date(int dd,Month mm,int yy)//构造函数
{.........}
...............
void Date::display(Date &d)const//显示日期
{
cout<<d.d<<" "<<d.m<<" "<<d.y<<endl;
}

file3:main.cpp

#include"date_header.h"


void main()
{
using namespace Chrono;

Date d;
Date::display(d);
}

编译错误:D:\programe\the c++ programming language\t\main.cpp(9) : error C2352: 'Chrono::Date::display' : illegal call of non-static member function
d:\programe\the c++ programming language\t\date_header.h(24) : see declaration of 'display'

请帮忙,谢谢,

2006-03-11 11:33
karlzhouzhi
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2005-12-25
收藏
得分:0 

我的想法是:在main中没有初始化date d,是想通过display()函数显示我开始设置的默认值Date Date::default_date(22,feb,1901);//初始化static数据成员

结果,就出现这个问题,请指教谢谢:)

2006-03-11 11:35
karlzhouzhi
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2005-12-25
收藏
得分:0 

构造函数是:
Date::Date(int dd,Month mm,int yy)//构造函数
{
if(yy==0)
yy=default_date.year();
if(mm==0)
mm=default_date.month();
if(dd==0)
dd=default_date.day();

int max;

switch(mm)
{
case feb: //对2月的处理,分闰年和平年
max=28+leapyear(yy);
break;
case apr: case jun: case sep: case nov:
max=30;
break;
case jan: case may: case jul: case aug: case oct: case dec:
max=31;
break;
default:
throw Bad_date();
}

if(dd<1||max<dd) //输入的日有问题
throw Bad_date();

y=yy;
m=mm;
d=dd;
}

2006-03-11 11:37
柳儿
Rank: 6Rank: 6
等 级:贵宾
威 望:25
帖 子:1830
专家分:30
注 册:2004-9-23
收藏
得分:0 
以下是引用karlzhouzhi在2006-3-11 11:33:00的发言:

file3:main.cpp

#include"date_header.h"


void main()
{
using namespace Chrono;

Date d;
Date::display(d); // 这句改为 d.display(d);只有静态函数可以这样调用。那需要把display函数定义为static。
}

编译错误:D:\programe\the c++ programming language\t\main.cpp(9) : error C2352: 'Chrono::Date::display' : illegal call of non-static member function
d:\programe\the c++ programming language\t\date_header.h(24) : see declaration of 'display'

请帮忙,谢谢,


成功会使人骄傲。如果你骄傲自大,你就会停止学习。不学习,人就停止了进步
2006-03-11 19:30
小镇小南瓜
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2006-3-12
收藏
得分:0 
路过,学习。。。。。
2006-03-12 21:38
快速回复:illegal call of non-static member function
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033247 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved