2013-10-09 2 views
1

이유는 내가 C2248: 'QObject::QObject' : cannot access private member declared in class 'QObject' 인 이유를 이해합니다. 여기에 설명 된대로 Qt는 개체는 복사 가능한 없습니다 :"QObject '클래스에 선언 된 비공개 멤버에 액세스 할 수 없습니다."

  1. https://stackoverflow.com/a/3513395/356726
  2. No copy constructor or assignment operator

문제 컴파일러 메시지는 항상 클래스의 (}를 폐쇄) 마지막 줄을 나타내는 것이있다 :

class MyQObject : public QObject { 
     Q_OBJECT 
     .... 
}; <-- error line 

근본 원인은 어딘가에 있습니다. 여기서 클래스는 복사됩니다 (다른 파일, 코드의 다른 행). 이것은 때로는 발견하기가 어렵습니다! 질문 :이 복제를 표시하기 전에 참고 : 오류

에 대한 진짜 이유의 라인을 찾을 수있는 방법이 있나요. 질문은 근본 원인을 찾는 것이지 다른 질문과 같이 해결하는 것이 아닙니다.

--- 편집 1 ---

좋은 힌트 Kuba et.al. 그것은 복사 생성자가 생성되는 이유 2.8.0

'QObject::QObject' 
     C:\Qt\5.1.0-32\qtbase\include\QtCore/qobject.h(115) : see declaration of 'QObject' 
     This diagnostic occurred in the compiler generated function 'MyQObject ::MyQObject (const MyQObject &)' 

가 궁금 Qt는 창조주에 컴파일, VS2010입니다. Qt의 DBus 지원 버전을 사용하고 있습니다. 이것이 이유일까요?

+0

어떤 VS 버전입니까? Mine (VS2010)은 사용 라인에서 오류를보고 한 다음 보고서의 추가 행에 "QObject :: QObject의 선언을 봅니다 (QObject를 가리 킵니다)"라고 말합니다. – Angew

+1

클래스 정의의 닫는 브리켓'}'다음에';'를 놓치지 않습니까? – vahancho

+2

유머 저희와 함께 전체 오류 메시지와 함께 귀하의 Visual Studio 버전을 게시하십시오. VS IDE의 문제 목록은 원하는 것이 아닌 * 메시지를받는 위치에주의하십시오. 원시 컴파일러 출력에서 ​​살펴보고 싶습니다. 적어도 Qt Creator에서는 문제를 클릭하면 문제 목록이 확장되어 어떤 일이 발생했는지에 대한 더 많은 정보를 얻을 수 있습니다. –

답변

1

가장 근본적인 원인을 찾는 가장 쉬운 방법은 복사본 ctor도 개인용으로 설정하는 것입니다. (또는 삭제되었지만 아직 VS2010에서는 가능하지 않습니다.) 이렇게하면 오류의 원인 인 자동 생성 된 복사본 ctor가 표시되지 않습니다.

1

MyObject을 명시 적으로 복사하지는 않지만이 오류 메시지가 계속 표시되면 MyObject과 함께 사용중인 사항이 사용자를 대신하여 복사 작업을 수행 중입니다.

가장 많이 발생하는 범인은 컨테이너 클래스 중 하나입니다. QList, QVector

더 많은 정보와 사용 할 수있는 컨테이너의 특정 클래스 '문서에 대한 Container class documentation을 읽어보십시오. 모든 컨테이너는 요소에 대한 요구 사항을 갖습니다. 기본 생성자가 있어야하며 할당 가능해야합니다. 여기에 문제가 있다고 생각됩니다.

관련 문제