Qt 함수 호출 오류
글쓴이: kjh27814 / 작성시간: 목, 2013/10/17 - 2:09오후
안녕하세요.
개발 도중 도저히 알 수 없는 버그가 떠서 이렇게 질문 올립니다.
MainWindow 클래스에서 다른 클래스에 있는 함수를 호출하는데
컴파일 에러로 "class::A" has no member named doSomething()
을 출력합니다.
A클래스의 doSomething 외의 다른 함수들을 호출하면 잘 불러지구요.
public으로 선언된거라 접근제한자 문제도 아닌 것 같은데
무슨 문제일까요?
도움 좀 부탁드리겠습니다 ㅜㅜ
Forums:
깜빡하고 안 썼는데 해당 에러가 난 뒤로부턴
깜빡하고 안 썼는데
해당 에러가 난 뒤로부턴 A클래스에 새로운 함수를 만들어서 콜 해도
같은 에러가 발생합니다. (에러가 나기 이전에 정의되어 있던 함수들은 잘 호출됨)
미치겠네요 ㅜㅜ
시간 상의 오류일 수 있으니, A 클라스가 들어 있는
시간 상의 오류일 수 있으니, A 클라스가 들어 있는 목적 파일을 완전히 지워 버리고 다시 컴파일하거나, qmake 를 실행해 보세요.
빌드 폴더를 삭제하고 다시 빌드해봤으나 동일한
빌드 폴더를 삭제하고 다시 빌드해봤으나 동일한 에러가
발생합니다. ㅜㅜ
제대로된 소스코드를 올리세요. class::A라는건
제대로된 소스코드를 올리세요. class::A라는건 C++에서 존재할 수 없는 이름입니다.
'class ListModel' has no
'class ListModel' has no member named 'updateFrom'
이라는 에러메시지입니다.
제가 잘 못 작성했네요.
MainWindow에서 ListModel를 멤버변수로 가지고 있고
ListModel에는 updateFrom 외에 여러가지 함수가 정의되어 있습니다.
다른 함수들은 호출이 잘 되는데 이번에 새로 추가한 updateFrom만 저런 에러를 뱉어내면서
컴파일이 되지 않습니다. 또한 아무 함수나 ListModel에 추가해서
MainWindow에서 호출 해봤는데 그 역시 마찬가지로 위와 비슷한 메시지가 뜹니다.
구글에 쳐봐도 Qt에서 제공하는 class에 대한 에러메시지 뿐이라 찾기가 힘드네요.
다시말씀드리지만 소스코드를 올려주세요.
다시말씀드리지만 소스코드를 올려주세요. ListModel의 해더와 MainWindow의 소스를 보여주세요.
gilgil.net
다음과 같은 방법을 사용해 보시기 바랍니다.
1. Makefile, Makefile.* 파일을 삭제한다.
2. ui_*.h, qrc_*.cpp, moc_*.cpp 파일을 삭제한다.
3. GeneratedFiles 폴더를 삭제한다.
4. Qt를 다시 열어 컴파일해 본다.
질문을 하실 때에는 (xylosper님도 말씀하셨지만) 정확한 내용의 파악을 위해 소스를 올리는 것을 추천합니다.
1. Qt 버전
2. 컴파일러 버전
3. 관련 소스
www.gilgil.net
다른 분들이 다들 리플에서 의심하시는
다른 분들이 다들 리플에서 의심하시는 대로...
build script가 dependency check를 잘 못해서 moc가 실행되지 않는 것으로 보이긴합니다.
소스는 제가 다니는 회사에서 개발중인 것이라 함부로
소스는 제가 다니는 회사에서 개발중인 것이라 함부로 공개할 수가 없어서
게시글을 이렇게 올리게 되었네요.
답변 주신분들 감사합니다.
해결 되었습니다.
혹시나 저와 같은 상황이 발생하신 분들이 있으실까봐
올립니다.
지금 개발 중인 프로젝트가 내부에 여러개의 서브 프로젝트로 구성되어 있습니다.
각 모듈에 따라 서브 프로젝트로 분리한 것인데,
누군가 서브 프로젝트 정리 도중 ListModel에 해당하는 .cpp파일과 .h파일이 다른 서브 프로젝트로 옮기다가 이것이 이동이 아닌 복사가 되어
라이브러리가 꼬여서 생긴 문제였습니다. 저는 A라는 서브 프로젝트에 있는 ListModel을 사용하려고 했고, 실제로 A라는 서브 프로젝트의 ListModel에 함수 등록등의 작업을 했구요.
근데 정작 MainWindow에서 사용하는 ListModel은 다른 서브 프로젝트로 복사된 것을 갖다 써서 아무리 수정해도 반영이 되지 않았던것이었습니다.
덕분에 며칠 고생했네요 ㅜㅜ
댓글 달기