请求帮忙解决error C2264的有关问题
请求帮忙解决error C2264的问题
#include<iostream>
#include<iomanip>
using namespace std;
//--------------------------
class Date{
int year,month,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(0,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<<'\n';
cout<<setfill(' ');
}
int main(){
Date d,e;
d.set(2000,12,6);
e.set("2005-05-05");
e.print();
if(d.isLeapYear())
d.print();
}
编译后的结果:
D:\VC++的Test\第八章\f0804\f0804.cpp(36) : error C2664: 'void __thiscall Date::set(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > &)' : cannot convert parameter 1 from 'char [11]' to 'class std::basic_string<
char,struct std::char_traits<char>,class std::allocator<char> > &'
A reference that is not to 'const' cannot be bound to a non-lvalue
D:\VC++的Test\第八章\f0804\f0804.cpp(40) : warning C4508: 'main' : function should return a value; 'void' return type assumed
Error executing cl.exe.
f0804.exe - 1 error(s), 1 warning(s)
------最佳解决方案--------------------
#include<iostream>
#include<iomanip>
using namespace std;
//--------------------------
class Date{
int year,month,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(0,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<<'\n';
cout<<setfill(' ');
}
int main(){
Date d,e;
d.set(2000,12,6);
e.set("2005-05-05");
e.print();
if(d.isLeapYear())
d.print();
}
编译后的结果:
D:\VC++的Test\第八章\f0804\f0804.cpp(36) : error C2664: 'void __thiscall Date::set(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > &)' : cannot convert parameter 1 from 'char [11]' to 'class std::basic_string<
char,struct std::char_traits<char>,class std::allocator<char> > &'
A reference that is not to 'const' cannot be bound to a non-lvalue
D:\VC++的Test\第八章\f0804\f0804.cpp(40) : warning C4508: 'main' : function should return a value; 'void' return type assumed
Error executing cl.exe.
f0804.exe - 1 error(s), 1 warning(s)
------最佳解决方案--------------------
#include<iostream>
#include<iomanip>
using namespace std;
//--------------------------
class Date{
int year,month,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(0,2).c_str());
}
bool Date::isLeapYear(){
return (year%4==0 && year%100!=0)
------其他解决方案--------------------
更改一下:
e.set(string("2005-05-05"));
------其他解决方案--------------------
(year%400==0);
}
void Date::print(){
cout<<setfill('0');
cout<<setw(4)<<year<<'-'<<setw(2)<<month<<'-'<<setw(2)<<day<<'\n';
cout<<setfill(' ');
}
int main(){
Date d,e;
string strDate("2005-05-05");