我正在尝试在Qt5项目中使用Presage文本预测平台,但由于std :: strings被破坏而继续出错。
我有这个类为预测系统提供字符串上下文:
class SomeClass : public ParentClass
{
public:
SomeClass(const std::string& _past_context) : past_context(_past_context) { }
std::string get_past_stream() const {
return past_context;
}
std::string get_future_stream() const { return empty; }
private:
const std::string& past_context;
const std::string empty;
};
在Presage代码中调用此上下文,如下所示:
std::string ContextTracker::getToken(const int index) const
{
std::stringstream pastStringStream(context_tracker_callback->get_past_stream());
...
}
如果我在past_context
方法中向std::out
发送get_past_stream
,则会显示正确的字符串。如果我在get_past_stream
方法中发送getToken
的结果,则会收到损坏的数据。
更新[2016-07-28]:
澄清问题并删除重复标记:只有在使用Qt5时才会出现问题。用g++
编译只包含SomeClass
的测试用例和Presage上下文调用者工作正常。在Qt5中使用STL时,字符串在用作返回值后会被破坏。
答案 0 :(得分:0)
在缩小了在Qt5中传递std::string
作为返回值的可能性之后,我在此处发现了类似的问题:'std::string' has no member named front [closed]
似乎必须明确配置Qt5才能使用C ++ 11 STL。因此,添加CONFIG += c++11
也解决了我的问题。