C++ 代码在Sun Studio上编译,但在gcc上出错

C++ 代码在Sun Studio上编译,但在gcc上出错,c++,gcc,c++11,C++,Gcc,C++11,我有一段代码,它使用sunstudio编译,但在g中给出了错误++ DBManager & DBManager::operator >> (UtlString &value) { //## begin DBManager::operator>>%921890065.body preserve=yes if(_state == DBMRan){ _reader >> static_cast<

我有一段代码,它使用sunstudio编译,但在g中给出了错误++

DBManager & DBManager::operator >> (UtlString &value)
{
  //## begin DBManager::operator>>%921890065.body preserve=yes
        if(_state == DBMRan){
                _reader >> static_cast<std::string>(value);
        }
        return *this;
  //## end DBManager::operator>>%921890065.body
}

DBManager.cpp:263: error: no match for âoperator>>â in â((DBManager*)this)->DBManager::_reader >> 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::UtlString*)value)->jda::UtlString::<anonymous>))))â
DBReader.h:50: note: candidates are: virtual DBReader& DBReader::operator>>(char&)
DBReader.h:51: note:                 virtual DBReader& DBReader::operator>>(unsigned char&)
DBReader.h:52: note:                 virtual DBReader& DBReader::operator>>(short int&)
DBReader.h:53: note:                 virtual DBReader& DBReader::operator>>(short unsigned int&)
DBReader.h:54: note:                 virtual DBReader& DBReader::operator>>(int&)
DBReader.h:55: note:                 virtual DBReader& DBReader::operator>>(unsigned int&)
DBReader.h:56: note:                 virtual DBReader& DBReader::operator>>(long int&)
DBReader.h:57: note:                 virtual DBReader& DBReader::operator>>(long long int&)
DBReader.h:58: note:                 virtual DBReader& DBReader::operator>>(long unsigned int&)
DBReader.h:59: note:                 virtual DBReader& DBReader::operator>>(long long unsigned int&)
DBReader.h:60: note:                 virtual DBReader& DBReader::operator>>(float&)
DBReader.h:61: note:                 virtual DBReader& DBReader::operator>>(double&)
DBReader.h:62: note:                 virtual DBReader& DBReader::operator>>(DBDateTime&)
DBReader.h:63: note:                 virtual DBReader& DBReader::operator>>(DBBlob&)
DBReader.h:64: note:                 virtual DBReader& DBReader::operator>>(std::string&)
DBReader.h:65: note:                 virtual DBReader& DBReader::operator>>(DBNullIndicator&)
otlv4.h:35416: note:                 otl_connect& operator>>(otl_connect&, otl_stream&)
DBManager&DBManager::operator>>(UtlString&value)
{
//##begin DBManager::operator>>%921890065.body preserve=yes
如果(_state==DBMRan){
_读卡器>>静态(值);
}
归还*这个;
//##结束DBManager::operator>>%921890065.body
}
DBManager.cpp:263:错误:在((DBManager*)this)->DBManager::\u reader>>std::basic_string((const std::basic_string&)((const std::basic_string*)(&((jda::UtlString*)值)->jda::UtlString::))
DBReader.h:50:注意:候选对象是:虚拟DBReader&DBReader::operator>>(char&)
DBReader.h:51:注意:虚拟DBReader&DBReader::operator>>(无符号字符&)
DBReader.h:52:注意:虚拟DBReader&DBReader::operator>>(短int&)
DBReader.h:53:注意:虚拟DBReader&DBReader::operator>>(短的无符号int&)
DBReader.h:54:注意:虚拟DBReader&DBReader::operator>>(int&)
DBReader.h:55:注意:虚拟DBReader&DBReader::operator>>(unsigned int&)
DBReader.h:56:注意:虚拟DBReader&DBReader::operator>>(长整型&)
DBReader.h:57:注意:虚拟DBReader&DBReader::operator>>(long-long-int&)
DBReader.h:58:注意:虚拟DBReader&DBReader::operator>>(长无符号int&)
DBReader.h:59:注意:虚拟DBReader&DBReader::operator>>(长-长无符号int&)
DBReader.h:60:注意:虚拟DBReader&DBReader::operator>>(float&)
DBReader.h:61:注意:虚拟DBReader&DBReader::operator>>(双精度&)
DBReader.h:62:注意:虚拟DBReader&DBReader::operator>>(DBDateTime&)
DBReader.h:63:注意:虚拟DBReader&DBReader::operator>>(DBBlob&)
DBReader.h:64:注意:虚拟DBReader&DBReader::operator>>(std::string&)
DBReader.h:65:注意:虚拟DBReader&DBReader::operator>>(DBNullIndicator&)
otlv4.h:35416:注意:otl_连接和运营商>>(otl_连接和otl_流和)
正如您在上面的错误消息中所看到的,DBReader类具有运算符>>,它通过引用获取std::string,而UtlString类是从std::string派生的,所以静态转换不应该是一个问题,但编译器仍然抱怨没有匹配的方法。 还有谁能告诉我如何删除出现在错误消息中的–charachter


谢谢

您可以从UtlString构建一个临时std::string

std::string tmp(value);    
if(_state == DBMRan){    
    _reader >> tmp;    
}    

这至少可以在两个编译器上使用。

我认为,
是控制台显示
的方式,因为某种原因。。。您不应该将其转换为std::string&
?我将static\u cast更改为static\u cast,但结果仍然相同。