2014-09-30 3 views
-3
내 코드에서 다음과 같은 기존의 클래스가

에 basic_string :이 표준을 할당 :: 문자열

struct Aclass { 
    typedef std::string TitleType; 
    TitleType title; 
    typedef std::size_t NumType; 
    NumType some_num; 
}; 

Aclass의 인스턴스화 한 후, 이제 aclass 말을하자, 나는 내 프로그램에서 일부 문자열로 aclass.title을 설정합니다. 다른 기능에서, 나는 다음을 수행 할 :

NumType new_num; 
std::string new_string; 

new_num = aclass.some_num; // this works, verified by print statement 
new_string = aclass.title; // this doesn't work 

typeid(aclass.title)는 예상대로 basic_string 유형을 제공하지만, new_string에 할당 내 프로그램이 충돌을 일으키는 것입니다. 이 할당을 올바르게 수행하려면 어떻게해야합니까? basic_string에서 string으로 전환하려면 전환이 필요합니까?

+0

new는 예약어입니다. A는 객체가 아닌 클래스입니다. – CashCow

+4

두 개체가 모두 유효한 개체 인 한 그렇게하는 방법입니다. 'new_string'은 방금 생성 했으므로 유효합니다. 그러나 우리는'A'에 대해 아무것도 모른다. 어떻게 그걸 만들었고, 그 이후로는 파괴되지 않았다고 확신합니까? 충돌을 증명할 수있는 완전한 예제를 게시 할 수 있습니까? –

+0

'A.title '의 내용이 유효하다는 것을 알고 있습니다. 확인하기 위해'std :: string (A.title)'을 출력 할 수 있습니다. – squareskittles

답변

0

"."대신 a.title을 NULL 또는 0으로 설정 했습니까? 문자열을 할당하려고하면 충돌이 발생합니다.

문자열 (http://www.cplusplus.com/reference/string/string/ 참조) :

char 형태와 basic_string의 템플릿 실체화
typedef basic_string<char> string; 

. 코드에서 std :: string 만 참조하면 변환이 필요 없습니다.

gdb 또는 ddd와 같은 디버거를 사용하여 오류를 트랩하는 것이 좋습니다.

+0

아니요,'aclass.title'은 "Sample Output"이라는 문자열을 가지고 있습니다. 그리고'std :: cout << std :: string (aclass.title);을 사용하여 그것을 인쇄 할 수 있습니다. – squareskittles

+0

무엇이 잘못되었는지를 알 수있는 충분한 코드가 없습니다. 오류를 잡으려면 gdb 또는 ddd와 같은 디버거를 사용해야합니다. 또한 valgrind와 같은 메모리 검사기 도구가 도움이 될 수 있습니다. – Juan