当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 8 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 求教:C++程序出错
帖子发表于 : 2009-05-14 21:32 
头像

注册: 2009-03-13 20:31
帖子: 337
地址: cnblogs.com/open_source
送出感谢: 2
接收感谢: 0 次
在code::block下,下面一段代码出错:
#include<iostream>
#include<iomanip>

using namespace std;

class Date{
int year;
int month;
int day;
public:
void set(int y,int m,int d);
void set(string& s);
bool isLeapYear() ;
void print();
};
void Date::set(int y,int m,int d){
year=y;month=m;day=d;
}

void Date::set(string& s){
year=atoi(s.substr(0,4).c_str());
month=atoi(s.substr(5,2).c_str());
day=atoi(s.substr(8,2).c_str());
}

bool Date::isLeapYear(){
return (year%4==0&&year%100!=0)||(year%400==0);
}

void Date::print(){
cout<<setfill('0');
cout<<setw(4)<<year<<'-'<<setw(2)<<month<<'-'<<setw(2)<<day<<endl;
cout<<setfill(' ');
}

int main(){
Date d,e;
d.set(2000,12,6);
e.set("2005-05-12");
e.print();
if(d.isLeapYear())
d.print();
}
这段代码出自钱能的的一本C++教程,我检查了一下,没有写错,是不是由于系统不同或编译器不同的原因。请高手指点一下


附件:
Screenshot.png
Screenshot.png [ 379.2 KiB | 被浏览 365 次 ]



_________________
代码:
'(("OS" . "Fedora")
  ("editor" . "Emacs"))
  ("blog" . "http://www.cnblogs.com/open_source")
页首
 用户资料  
 
2 楼 
 文章标题 : Re: 求教:C++程序出错
帖子发表于 : 2009-05-15 9:29 
头像

注册: 2007-11-29 9:41
帖子: 8455
送出感谢: 0 次
接收感谢: 0 次
错误不是写得很清楚嘛,
传的参数不对...


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 求教:C++程序出错
帖子发表于 : 2009-05-15 21:55 
头像

注册: 2008-01-12 13:07
帖子: 137
送出感谢: 0 次
接收感谢: 0 次
显然在编译器无法将“2005-05-12”识别为string类别。因为2005-05-12是个char数组类型


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 求教:C++程序出错
帖子发表于 : 2009-05-30 15:55 
头像

注册: 2009-05-30 15:52
帖子: 46
地址: DL LIAONING CHN
送出感谢: 0 次
接收感谢: 0 次
好像少了#include <cctype>?


页首
 用户资料  
 
5 楼 
 文章标题 : Re: 求教:C++程序出错
帖子发表于 : 2009-05-30 16:38 
头像

注册: 2009-05-30 15:52
帖子: 46
地址: DL LIAONING CHN
送出感谢: 0 次
接收感谢: 0 次
还有#include <cstdlib>,哈哈


页首
 用户资料  
 
6 楼 
 文章标题 : Re: 求教:C++程序出错
帖子发表于 : 2009-05-30 16:44 
头像

注册: 2009-05-30 15:52
帖子: 46
地址: DL LIAONING CHN
送出感谢: 0 次
接收感谢: 0 次
要学C++,我建议,钱能老师的书还是不要看了,要看就看《c++primer(第四版)》和BjarneStroustrup 的《C++程序设计语言(特别版)》。


页首
 用户资料  
 
7 楼 
 文章标题 : Re: 求教:C++程序出错
帖子发表于 : 2009-06-04 22:41 
头像

注册: 2009-05-30 15:52
帖子: 46
地址: DL LIAONING CHN
送出感谢: 0 次
接收感谢: 0 次
呼文彪 写道:
在code::block下,下面一段代码出错:
#include<iostream>
#include<iomanip>

using namespace std;

class Date{
int year;
int month;
int day;
public:
void set(int y,int m,int d);
void set(string& s);
bool isLeapYear() ;
void print();
};
void Date::set(int y,int m,int d){
year=y;month=m;day=d;
}

void Date::set(string& s){
year=atoi(s.substr(0,4).c_str());
month=atoi(s.substr(5,2).c_str());
day=atoi(s.substr(8,2).c_str());
}

bool Date::isLeapYear(){
return (year%4==0&&year%100!=0)||(year%400==0);
}

void Date::print(){
cout<<setfill('0');
cout<<setw(4)<<year<<'-'<<setw(2)<<month<<'-'<<setw(2)<<day<<endl;
cout<<setfill(' ');
}

int main(){
Date d,e;
d.set(2000,12,6);
e.set("2005-05-12");
e.print();
if(d.isLeapYear())
d.print();
}
这段代码出自钱能的的一本C++教程,我检查了一下,没有写错,是不是由于系统不同或编译器不同的原因。请高手指点一下

很明显"2005-05-12"是一个字符串文字量,它在C++里相当于const char *,不能把它隐式地转换成string&,这不符合数据安全的要求。正确地做法是将"2005-05-12"赋值给string变量,比如:string str_dt = "2005-05-12";
再使用e.set(str_dt);调用类方法,形参与实参的类型匹配


页首
 用户资料  
 
8 楼 
 文章标题 : Re: 求教:C++程序出错
帖子发表于 : 2009-06-08 15:57 

注册: 2009-04-09 23:27
帖子: 1
送出感谢: 0 次
接收感谢: 0 次
楼上正解, 使用 atoi 还应包含 <cstdlib> 头文件 或者 <stdlib.h> 推荐前者.


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 8 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 4 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译