2010-01-07 2 views
0

C++에서 복잡한 구조를 구축 할 수없는 : 나는 두 번째 구조에서 인스턴스를 만들려고 다음에 시도 할 때마다나는 다음과 같이 두 가지 기본 구조를 가지고

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() 멤버를 호출하십시오. 저는이 라인에 몇 가지 문제가 있다고 말하는 erro를 얻을 것입니다 :

+ QString::number(this->Connections[0].Field1) + " , " + QString::number(this->Connections[0].Field2) 

내 문제는 정확히 무엇인지 말해 주시겠습니까? 안부.

+1

정확한 오류 메시지를 게시하십시오. –

+0

정확한 오류를 게시하십시오. 컴파일러 또는 런타임 오류입니까? –

+0

QList에서 ASSERT 실패 :: 연산자 [] : "인덱스가 범위를 벗어남"파일 /usr/include/QtCore/qlist.h, 403 행 주요 문제는 내가 시도하고있는 목록의 두 요소와 관련이 있습니다 그들을 액세스 할 수 있습니다. –

답변

1

어설 션 오류는 Connections에 참조한 요소가 없다고 말합니다. Connections.size()를 인쇄하면 목록에 몇 개의 요소가 들어 있다고 말합니까?

string.c_str()을 반환하면 해제 된 메모리에 대한 포인터가 반환 될 수 있으므로 잠재적 인 메모리 문제 일 수 있습니다.

makeString(string &s) 
{ 
    ... 
    s = qstr.toStdString(); 
} 

string s; 
makeString(s); 
+0

답장을 주셔서 감사합니다.하지만 문자열 (var에 대한 내 캐스팅)에는 문제가 없습니다. –

+1

c_str()은 유효하지 않은 (해제 된) 메모리를 가리 킵니다. – jspcal

0
:

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 함수에서 문자열 개체에 대한 참조를 전달할 수 :

C에서

는 ++, 사용자 정의 인쇄 자주 클래스의 스트림 연산자를 오버로딩하여 수행됩니다

예 코드에 문제가 많습니다.

  • 일반적으로 사람들은 "this-> x"를 쓰지 않습니다. 그들은 단지 "x"라고 씁니다; 다른 대답은 지적
  • 은 "this->"입니다 암시 내부 방법은 c_str()는 여기에 잘못된 메모리 포인트

그러나, 적어도 하나 개의 요소를 포함해야 연결 목록은 생성자를 추가하기 때문에 그곳에. 포스터가 구조를 할당하는 코드를 게시하면 도움이 될 것으로 생각합니다. 생성자가 호출되지 않았거나 toStr()이 실제로 호출되기 전에 연결 목록을 지우는 다른 코드가있는 것 같습니다.

관련 문제