我有两个基本结构如下:
struct stuSectionProperties
{
int Field1; // Row | BoxNo | SplitterNo
int Field2; // Col | Adapter | -
double Latitude;
bool IsEast;
int Band;
int CableNo;
SDP::Global::enuSections::Type Section;
stuSectionProperties()
{
this->Field1 = -1;
this->Field2 = -1;
this->Latitude = -1;
this->Band = -1;
this->Section = SDP::Global::enuSections::None;
this->CableNo = -1;
}
const char* toStr()
{
return ((QString) (QString::number(this->Field1) + " , " + QString::number(this->Field2) + " , " + QString::number(Latitude) + " , " + QString::number(IsEast) + " , " + QString::number(Band) + " , "
+ QString::number((int) Section) + QString::number((int) CableNo))).toStdString().c_str();
}
};
和
struct stuSearchResult
{
stuSectionProperties MyData;
QList<stuSectionProperties> Connections;
stuSearchResult()
{
this->MyData.Field1 = -1;
this->MyData.Field2 = -1;
this->MyData.Latitude = -1;
this->MyData.Band = -1;
this->MyData.Section = SDP::Global::enuSections::None;
this->MyData.CableNo = -1;
stuSectionProperties stuDummy;
stuDummy.Band=-1;
stuDummy.CableNo=-1;
stuDummy.Field1=-1;
stuDummy.Field2=-1;
stuDummy.IsEast=-1;
stuDummy.Latitude=-1;
stuDummy.Section= SDP::Global::enuSections::None;
this->Connections.append(stuDummy);
}
const char * toStr()
{
return ((QString) (QString::number(this->MyData.Field1) + " , " + QString::number(this->MyData.Field2) + " , " + QString::number(this->MyData.Latitude) + " , " + QString::number(this->MyData.IsEast) + " , " + QString::number(this->MyData.Band) + " , "
+ QString::number((int) this->MyData.Section) + QString::number((int) this->MyData.CableNo)) + " , " + QString::number(this->Connections[0].Field1) + " , " + QString::number(this->Connections[0].Field2) ).toStdString().c_str();
}
};
每当我尝试从第二个结构创建一个实例然后尝试调用它的toStr()成员时,我会得到一个错误,它说这些行有一些问题:
+ QString::number(this->Connections[0].Field1) + " , " + QString::number(this->Connections[0].Field2)
你能告诉我我的问题到底是什么吗?
问候。
答案 0 :(得分:1)
断言错误表示Connections没有您引用的元素。如果你打印出Connections.size()它表示列表包含多少个元素?
返回string.c_str()可能是一个潜在的内存问题,因为它返回一个指向已释放的内存的指针。
在c ++中,自定义打印通常是通过重载类中的流操作符来完成的:
friend std::ostream &operator<<(std::ostream &os, const myClass &c)
{
return os << c.some << c.val;
}
...
cout << myObj << endl;
...
strstream ss;
ss << "cool: " << myObj << " " << 55;
string s = ss.str();
你也可以在toStr函数中传递对字符串对象的引用:
makeString(string &s)
{
...
s = qstr.toStdString();
}
string s;
makeString(s);
答案 1 :(得分:0)
是的,代码有很多问题
但是,Connections列表应至少包含一个元素,因为构造函数会将其附加到那里。我认为如果海报也发布代码来分配结构会有所帮助。看起来构造函数没有被调用或者在实际调用toStr()之前还有其他代码可以清除Connections列表。