在Qt 5

时间:2016-07-27 20:17:17

标签: c++ qt stl stdstring

我正在尝试在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时,字符串在用作返回值后会被破坏。

1 个答案:

答案 0 :(得分:0)

在缩小了在Qt5中传递std::string作为返回值的可能性之后,我在此处发现了类似的问题:'std::string' has no member named front [closed]

似乎必须明确配置Qt5才能使用C ++ 11 STL。因此,添加CONFIG += c++11也解决了我的问题。