[MFC]질문 드리겠습니다.
솔찬
MFC프로그램에서 제가 구조체를 사용했는데여
struct Info{
CPoint pt;//좌표값 저장
CString str;//글자 저장
}*s
이렇게 한뒤에
s = (struct Info *) malloc(sizeof(struct Info)*size);//size=30
으로 동적할당뒤에
왼쪽 버튼을 누르면 글자를 찍는 겁니다.
void CStringTestView::OnLButtonDown(UINT nFlags, CPoint point)
{
s[index].pt.x = point.x;
s[index].pt.y = point.y;
s[index].str = m_str ;---여기서 에러가 납니다
index++;
Invalidate();
CView::OnLButtonDown(nFlags, point);
}
좌표값은 저장이 되는데 CString 문자를 복사를 할려니 에러가 나더군여..
그래서 s[index].str.format(m_str) //이렇게도 해보니 에러가 나더군여
그냥 CString temp = m_str;일 경우면 잘 되는데
왜 저렇게 하면 안되는데 잘 모르겠네여~~
-
미나래
답변 감사합니다....C++을 더 공부해야되는걸 뼈저리게 느끼네여;;
-
연보라
나의허니님 말씀이 맞네요. 저도 무심코 봤는데, 클래스를 생성시는 new로 동적할당을 해줘야 하죠. CString 같이 생성자에 여러가지 설정되어 있는 녀석은 특히나... malloc을 사용하면 생성자가 호출되지 않을테니까요.
-
나츠
안녕하세요. 살며시 조언드려 봅니다.
CString 이란 클래스는 반드시 생성자를 거쳐야 사용가능한 클래스로 알고 있습니다.
님께서 s = malloc (sizeof(struct info)*size); 를 행하시면,
원하시는 객체의 크기는 확보하였으나,
s[0].str ~~ s[29].str 은 생성자를 실행하지 않은 상태 입니다.
c++ 의 클래스가 담긴 구조체를 c 의 함수로 할당하지 마시고
s = new info[30]; 으로 할당 및 생성자 -
거울
추가질문은 안받구요. (이런거 답해주면 밑도 끝도 없이 계속 이어서 물어보시길래..)
제가 아는 범위에서 힌트(?)만 드리면,
1)
s[index].str = m_str ;---여기서 에러가 납니다 === 에서, index가 할당한 배열 사이즈 개수(30)를 초과해서 사용되는지 체크해보시구요.
2)
s[index].str.format(m_str)는 s[index].str.Format(\%s\