如何解决"' std :: length_error"将类成员字符串传递给其他类函数时?

时间:2014-08-05 06:54:39

标签: c++ string event-handling

我有以下课程,

#include <iostream>

using namespace std;

class eventHadler
{
  public:
  virtual void online(string& str)
   {
   cout<<" str :"<< str << endl;  // accessing str here in this function caused "std::length_error"
   }
};

并且事件生成器类如下:

class my
{
   public:
   eventHadler *ptr; // this is initialized in one member function
   string localStr;
   my()
   {
        localStr.reserve(1);
        ptr = NULL;
    }
   static void myfun(void* pt);
};

    void my::myfun(void* ptMy)
    {
        my *hdl = static_cast < my* >(ptMy);
        hdl->localStr.clear();
        hdl->localStr.append("mtfun called");
        hdl->ptr->online(hdl->localStr);
    }


int main()
{
        eventHadler eventobj;
        my myObj;
        myObj.ptr = &eventobj;
        my::myfun((void*)&myObj);
        return 0;
}

但是通过调用my::myfun(),将localStr传递给online()函数会导致以下

terminate called after throwing an instance of 'std::length_error'
  what():  basic_string::_S_create

我无法重现上述错误,但它出现在我的开发代码中。

任何解决此错误的指针。

P.S:我无法改变myfun()原型。

1 个答案:

答案 0 :(得分:0)

您可能尝试创建一个负长度的字符串。