Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 无法将派生字符串类与ifstream类一起使用_C++_Linux_Gcc - Fatal编程技术网

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
派生是一种糟糕的方法。我认为使用构图而不是在