Qt 함수 호출 오류

kjh27814의 이미지

안녕하세요.

개발 도중 도저히 알 수 없는 버그가 떠서 이렇게 질문 올립니다.

MainWindow 클래스에서 다른 클래스에 있는 함수를 호출하는데

컴파일 에러로 "class::A" has no member named doSomething()

을 출력합니다.

A클래스의 doSomething 외의 다른 함수들을 호출하면 잘 불러지구요.

public으로 선언된거라 접근제한자 문제도 아닌 것 같은데

무슨 문제일까요?

도움 좀 부탁드리겠습니다 ㅜㅜ

kjh27814의 이미지

깜빡하고 안 썼는데
해당 에러가 난 뒤로부턴 A클래스에 새로운 함수를 만들어서 콜 해도
같은 에러가 발생합니다. (에러가 나기 이전에 정의되어 있던 함수들은 잘 호출됨)
미치겠네요 ㅜㅜ

ifree의 이미지

시간 상의 오류일 수 있으니, A 클라스가 들어 있는 목적 파일을 완전히 지워 버리고 다시 컴파일하거나, qmake 를 실행해 보세요.

kjh27814의 이미지

빌드 폴더를 삭제하고 다시 빌드해봤으나 동일한 에러가

발생합니다. ㅜㅜ

klyx의 이미지

제대로된 소스코드를 올리세요. class::A라는건 C++에서 존재할 수 없는 이름입니다.

kjh27814의 이미지

'class ListModel' has no member named 'updateFrom'
이라는 에러메시지입니다.

제가 잘 못 작성했네요.

MainWindow에서 ListModel를 멤버변수로 가지고 있고

ListModel에는 updateFrom 외에 여러가지 함수가 정의되어 있습니다.

다른 함수들은 호출이 잘 되는데 이번에 새로 추가한 updateFrom만 저런 에러를 뱉어내면서

컴파일이 되지 않습니다. 또한 아무 함수나 ListModel에 추가해서

MainWindow에서 호출 해봤는데 그 역시 마찬가지로 위와 비슷한 메시지가 뜹니다.

구글에 쳐봐도 Qt에서 제공하는 class에 대한 에러메시지 뿐이라 찾기가 힘드네요.

klyx의 이미지

다시말씀드리지만 소스코드를 올려주세요. ListModel의 해더와 MainWindow의 소스를 보여주세요.

gilgil의 이미지

다음과 같은 방법을 사용해 보시기 바랍니다.

1. Makefile, Makefile.* 파일을 삭제한다.
2. ui_*.h, qrc_*.cpp, moc_*.cpp 파일을 삭제한다.
3. GeneratedFiles 폴더를 삭제한다.
4. Qt를 다시 열어 컴파일해 본다.

질문을 하실 때에는 (xylosper님도 말씀하셨지만) 정확한 내용의 파악을 위해 소스를 올리는 것을 추천합니다.
1. Qt 버전
2. 컴파일러 버전
3. 관련 소스

klenui의 이미지

다른 분들이 다들 리플에서 의심하시는 대로...

build script가 dependency check를 잘 못해서 moc가 실행되지 않는 것으로 보이긴합니다.

kjh27814의 이미지

소스는 제가 다니는 회사에서 개발중인 것이라 함부로 공개할 수가 없어서

게시글을 이렇게 올리게 되었네요.

답변 주신분들 감사합니다.

kjh27814의 이미지

혹시나 저와 같은 상황이 발생하신 분들이 있으실까봐

올립니다.

지금 개발 중인 프로젝트가 내부에 여러개의 서브 프로젝트로 구성되어 있습니다.

각 모듈에 따라 서브 프로젝트로 분리한 것인데,

누군가 서브 프로젝트 정리 도중 ListModel에 해당하는 .cpp파일과 .h파일이 다른 서브 프로젝트로 옮기다가 이것이 이동이 아닌 복사가 되어

라이브러리가 꼬여서 생긴 문제였습니다. 저는 A라는 서브 프로젝트에 있는 ListModel을 사용하려고 했고, 실제로 A라는 서브 프로젝트의 ListModel에 함수 등록등의 작업을 했구요.

근데 정작 MainWindow에서 사용하는 ListModel은 다른 서브 프로젝트로 복사된 것을 갖다 써서 아무리 수정해도 반영이 되지 않았던것이었습니다.

덕분에 며칠 고생했네요 ㅜㅜ

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.