C++ 无法将派生字符串类与ifstream类一起使用
我有一个C++ 无法将派生字符串类与ifstream类一起使用,c++,linux,gcc,C++,Linux,Gcc,我有一个UtlString类,它派生自std::string,并添加了额外的实用程序,如将int转换为string。但当我在下面的代码中将这个类与流一起使用时,我遇到了一些错误 istream& operator >> (istream& stream, UtlDatePeriod& object) { stream >> (object._startDate).AsString() >> (object._endDate).As
UtlString
类,它派生自std::string
,并添加了额外的实用程序,如将int转换为string。但当我在下面的代码中将这个类与流一起使用时,我遇到了一些错误
istream& operator >> (istream& stream, UtlDatePeriod& object)
{
stream >> (object._startDate).AsString() >> (object._endDate).AsString();
//(object._startDate).AsString() returns UtlString by value.
return stream;
}
错误是:
error: no match for âoperator>>â in âstream >> std::basic_string<char, std::char_traits<char>, std::allocator<char> >(((const std::basic_string<char, std::char_traits<char>, std::allocator<char> >&)((const std::basic_string<char, std::char_traits<char>, std::allocator<char> >*)(& jda::UtlDate::AsString() const().jda::UtlString::<anonymous>))))â
/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../include/c++/4.4.6/istream:119: note: candidates are:
std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(std::basic_istream<_CharT, _Traits>& (*)(std::basic_istream<_CharT, _Traits>&)) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../include/c++/4.4.6/istream:123: note: std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(std::basic_ios<_CharT, _Traits>& (*)(std::basic_ios<_CharT, _Traits>&)) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../include/c++/4.4.6/istream:130: note: std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(std::ios_base& (*)(std::ios_base&)) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../include/c++/4.4.6/istream:166: note: std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(bool&) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../include/c++/4.4.6/istream:170: note: std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(short int&) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../include/c++/4.4.6/istream:173: note: std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(short unsigned int&) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../include/c++/4.4.6/istream:177: note: std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(int&) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../include/c++/4.4.6/istream:180: note: std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(unsigned int&) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../include/c++/4.4.6/istream:184: note: std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(long int&) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../include/c++/4.4.6/istream:188: note: std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(long unsigned int&) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../include/c++/4.4.6/istream:193: note: std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(long long int&) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../include/c++/4.4.6/istream:197: note: std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(long long unsigned int&) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../include/c++/4.4.6/istream:202: note: std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(float&) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../include/c++/4.4.6/istream:206: note: std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(double&) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../include/c++/4.4.6/istream:210: note: std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(long double&) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../include/c++/4.4.6/istream:214: note: std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(void*&) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../include/c++/4.4.6/istream:238: note: std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(std::basic_streambuf<_CharT, _Traits>*) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../include/c++/4.4.6/bits/basic_string.h:2485: note: std::basic_istream<_CharT, _Traits>& std::operator>>(std::basic_istream<_CharT, _Traits>&, std::basic_string<_CharT, _Traits, _Alloc>&) [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>]
error:std::basic_string(((const std::basic_string&)((const std::basic_string*)(&jda::UtlDate::AsString()const().jda::UtlString::))中的–operator>>不匹配
/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../../../../../../../include/c++/4.4.6/istream:119:注:候选者包括:
std::basic_-istream&std::basic_-istream::operator>>(std::basic_-istream&(*)(std::basic_-istream&))[带_-CharT=char,_-Traits=std::char\u-Traits]
/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../../../../../../include/c++/4.4.6/istream:123:注意:std::basic_-istream&std::basic_-istream::operator>>(std::basic_-ios&(*)(std::basic_-ios&)[带.\u-CharT=CharT,\u-Traits=std::CharT]
/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../../../../../include/c++/4.4.6/istream:130:注:std::basic_-istStream&std::basic_-istStream&std::basic_-Stream::operator>>(std::ios\u-base&(*)(std::ios\u-base&)[带.\u-CharT=CharT,\u-Traits=std::CharT]
/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../../../../../../include/c++/4.4.6/istream:166:注意:std::basic_istream&std::basic_istream::operator>>(bool&)[带_CharT=char,_Traits=std::char_Traits]
/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../../../../../include/c++/4.4.6/istream:170:注意:std::basic_istream&std::basic_istream::operator>>(短int&)[带_CharT=char,_Traits=std::char\u Traits]
/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../../../../../../include/c++/4.4.6/istream:173:注意:std::basic_istream&std::basic_istream::operator>>(短的无符号int&)[带_CharT=CharT,_Traits=std::char
/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../../../../../include/c++/4.4.6/istream:177:注意:std::basic_istream&std::basic_istream::operator>>(int&)[带_CharT=char,_Traits=std::char_Traits]
/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../../../../../../include/c++/4.4.6/istream:180:注意:std::basic_istream&std::basic_istream::operator>>(无符号int&)[带_CharT=char,_Traits=std::char_Traits]
/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../../../../../../include/c++/4.4.6/istream:184:注意:std::basic_istream&std::basic_istream::operator>>(长整型)[带_CharT=char,_Traits=std::char_Traits]
/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../../../../../../include/c++/4.4.6/istream:188:注意:std::basic_istream&std::basic_istream::operator>>(长无符号int&)[带_CharT=CharT,_Traits=std::char
/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../../../../../../../include/c++/4.4.6/istream:193:注意:std::basic_istream&std::basic_istream::operator>>(long long int&)[带_CharT=CharT,_Traits=std::char_Traits]
/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../../../../../../include/c++/4.4.6/istream:197:注意:std::basic_istream&std::basic_istream::operator>>(长-长无符号int&)[带_CharT=CharT,_Traits=std::char
/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../../../../../include/c++/4.4.6/istream:202:注意:std::basic_istream&std::basic_istream::operator>>(float&)[带_CharT=char,_Traits=std::char_Traits]
/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../../../../../../include/c++/4.4.6/istream:206:注意:std::basic_-istream&std::basic_-istream::operator>>(double&)[带_-CharT=char,_-Traits=std::char\u-Traits]
/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../../../../../../include/c++/4.4.6/istream:210:注意:std::basic_istream&std::basic_istream::operator>>(长双精度&)[带_CharT=CharT,_Traits=std::char\u Traits]
/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../../../../../../include/c++/4.4.6/istream:214:注意:std::basic_istream&std::basic_istream::operator>>(void*&)[带_CharT=char,_Traits=std::char
/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../../../../../../include/c++/4.4.6/istream:238:注:std::basic_istream&std::basic_istream::operator>>(std::basic_streambuf*)[带_CharT=char,_Traits=std::char_Traits]
/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../../../../../include/c++/4.4.6/bits/basic_string.h:2485:注意:std::basic_istream&std::operator>>(std::basic_istream&,std::basic_string&),std::basic_string&[带(CharT=CharT,)Traits=std::CharT\u-Alloc=std::分配器]
不要使用继承来添加额外的实用程序。相反,添加非成员函数以向std::string
提供该功能。所以不是
class FancyString: public std::string
{
public:
void doCoolStuff() const;
};
写
如果您(还)需要向std::string
添加额外的状态,请使用composition
class FancyString
{
public:
void doCoolStuff() const;
private:
int some_state;
std::string s_;
};
std::string
从未被设计为基类。首先,它没有虚拟析构函数。不要使用继承来添加额外的实用程序。相反,添加非成员函数以向std::string
提供该功能。所以不是
class FancyString: public std::string
{
public:
void doCoolStuff() const;
};
写
如果您(还)需要向std::string
添加额外的状态,请使用composition
class FancyString
{
public:
void doCoolStuff() const;
private:
int some_state;
std::string s_;
};
std::string
从未被设计为基类。首先,它没有虚拟析构函数。您的代码是:
stream >> (object._startDate).AsString() ...
要澄清您的问题,请参阅以下错误代码:
string f()
{
return "Hi";
}
...
cin >> f(); // <--- ERROR
string f()
{
返回“Hi”;
}
...
cin>>f();// 您的代码是:
stream >> (object._startDate).AsString() ...
要澄清您的问题,请参阅以下错误代码:
string f()
{
return "Hi";
}
...
cin >> f(); // <--- ERROR
string f()
{
返回“Hi”;
}
...
cin>>f();// 如果您确实希望从istream读取新类,则应该添加函数
istream & operator >> (istream & is, Uistream& data);
如果您确实希望从istream读取新类,则应该添加函数
istream & operator >> (istream & is, Uistream& data);
从std::string
派生是一种糟糕的方法。我认为使用组合而不是继承会使您的问题更容易解决。从std::string
派生是一种糟糕的方法。我认为使用构图而不是在