기본 콘텐츠로 건너뛰기

4월, 2014의 게시물 표시

c++ 변환생성자

c++ 코딩하다가 매우 당혹스러운 일을 겪었습니다. 함수 파라미터에 특정 객체가 들어가야 하는데, 그만 실수로 문자열을 넣었습니다. 보통은 컴파일 에러가 발생했겠지만, 이번에는 그렇지 않았습니다. 심지어 정상동작했습니다. 혹시나 해서 이름이 같은 다른 함수가 있는지 확인해보았지만 아니었습니다. 너무 이상해서 디버깅을 해보니, 파라미터로 문자열을 넘기는 순간, 그 문자열을 가지고 해당 객체를 생성하는 것이 아니겠어요?   네, 변환생성자 때문에 발생한 소동이었습니다. 사실 해당 객체의 클래스에는 문자열을 파라미터로 받는 생성자가 있었고, 이에 컴파일러가 알아서 객체를 생성한 것이었습니다. 생성자 선언에 explicit 키워드를 추가하면 이와 같은 문제를 예방할 수 있습니다. (예: explicit MyClass(CString csText);) 참고 변환시리즈 정리(변환생성자, 변환함수) MSDN - explicit (C++)

XE 용량 초과로 문제 발생 시 조치법.

XE를 사용 중인 웹사이트에서 용량이 꽉 차버려 사이트가 제대로 동작하지 않는 문제가 발생했습니다. 특히 첨부파일 삭제 기능도 동작하지 않고, 관리자 페이지에 접근하려고 해도 다음의 에러 메시지가 나타나면서 접근이 불가능했습니다. Fatal error: Call to a member function getAction() on a non-object in ...(중략)... DB.class.php ... (생략) 용량 문제는 첨부 파일의 경로를 찾아, 직접 지워서 해결 했는데, 저 오류는 사용 가능 용량이 생겼다고 해서 해결되지 않았습니다. 저는 다음의 방법으로 문제를 해결했습니다. XE 루트/files/cache 폴더의 이름을 변경합니다. (예: cache_bak) XE 관리자 페이지로 접근합니다. (http://웹사이트 주소/xe/?module=admin   또는 http://웹사이트 주소/xe/?module=admin&act=dispAdminConfig) 관리자 페이지에서 캐쉬 재생성 작업을 진행합니다. (※ 관리자 페이지가 제대로 나타나지 않는다면 다른 문제이므로 cache 폴더를 복원하고 다른 방법을 찾아봅니다.) 참고: http://www.xpressengine.com/qna/20701795 - 문제 해결 힌트를 얻은 곳. http://www.xeschool.com/xe/step1_52 - 캐쉬파일 재생성 방법 참고. http://www.xpressengine.com/qna/19689609 - 첨부파일을 직접 삭제할 때 참고.