2013-06-30 3 views
1

함수 매개 변수로 QList에 문제가 있으며 도움을 주시면 기쁠 것입니다.함수 매개 변수로 QList - 링크 오류 - LNK2019

나는 예를 들어,이 코드가 있습니다

void SpinBoxList_Enable(QList<QWidget *> *spinBoxList) 
{ 
    foreach(QWidget* mWidget,*spinBoxList) 
     mWidget->setEnabled(false); 
} 

을하고 implemantation 파일에 내가 포인터로 QList<QWidget *> 변수를 사용

SpinBoxList_Enable(&controlBoardSpinBoxList); 

(controlBoardSpinBoxListQList<QWidget *>의 변수입니다).

기능 ToggleBoards_Slot(bool)은 사용하는 슬롯입니다. 컴파일 할 때 다음 오류 메시지가 나타납니다.

1>cmosaixserialnumber.obj : error LNK2019: unresolved external symbol "private: void __cdecl CMosaixSerialNumber::SpinBoxList_Disable(class QList<class QWidget *> *)" ([email protected]@@[email protected]@@@@@Z) referenced in function "public: void __cdecl CMosaixSerialNumber::ToggleBoards_Slot(bool)" ([email protected]@@[email protected]) 
1>cmosaixserialnumber.obj : error LNK2019: unresolved external symbol "private: void __cdecl CMosaixSerialNumber::SpinBoxList_Enable(class QList<class QWidget *> *)" ([email protected]@@[email protected]@@@@@Z) referenced in function "private: void __cdecl CMosaixSerialNumber::on_ControlBoardCheckBox_StateChanged(int)" ([email protected]@@[email protected]) 

어떻게 해결할 수 있습니까?

답변

1

포인터를 사용하여 함수를 호출했지만 함수 인수가 포인터가 아닙니다. 나는 (복사 방지하기 위해) 당신이 참조로 인수를 변경하는 것이 좋습니다 :

void SpinBoxList_Enable(QList& spinBoxList) { ... } 

그런 다음 연산자 주소의 사용없이 전화 : Qt는에

SpinBoxList_Enable(controlBoardSpinBoxList); 
+0

또한 함수 본문의'* spinBoxList'도 수정해야합니다. –

+0

안녕하세요 요아킴, 나는 지금이 오류 메시지가 나타납니다 : 1> cmosaixserialnumber.obj : 오류 LNK2019 : 해결되지 않은 외부 기호 "개인 : 무효 __cdecl CMosaixSerialNumber :: SpinBoxList_Disable (클래스 QList <클래스 QWidget *> &") "? SpinBoxList_Disable @ CMEAixSerialNumber :: ToggleBoards_Slot (ToggleBoards_Slot @ CMosaixSerialNumber @@ QEAAX_N @ Z) – EVH671

+0

1> cmosaixserialnumber.obj : CMosaixSerialNumber :: @AEAAXAEAV? $ QList @ PEAVQWidget @@@@@ Z 함수에서 "public : void __cdecl CMosaixSerialNumber :: ToggleBoards_Slot (bool) 오류 LNK2019 : 확인할 수없는 외부 기호 "private : void __cdecl CMosaixSerialNumber :: SpinBoxList_Enable (클래스 QList <클래스 QWidget *>)"(SpinBoxList_Enable @ CMosaixSerialNumber @@ AEAAXAEAV? $ QList @ PEAVQWidget @@@@@ Z) 비공개 : void __cdecl CMosaixSerialNumber :: on_ControlBoardCheckBox_StateChanged (int) "(? on_ControlBoardCheckBox_StateChanged @ CMosaixSerialNumber @@ AEAAXH @ Z) – EVH671

0

컨테이너를하는 참조 카운트 암시에 대한 공유 독서. QList을 포인터로 전달할 필요는 없지만 컨테이너 (특히 STL은 다른 방법으로는 심도 깊음)를 사용하는 것이 일반적이며 좋은 연습인데도 참조로 전달할 필요조차 없습니다 (요아킴 제안) 복사 됨).

실제 QList를 전달할 수 있으며 쓰기 작업을 시도하면 사본을 작성하고 대신 쓰기 만합니다. 자세한 내용은 here을 참조하십시오.

+0

좋은 연습은 참조가 아닌 const 참조입니다. –

+0

@FrankOsterfeld - 사용 컨텍스트에 따라 다르며, 아무 것도 변경하지 않을 경우 'const'로 설정하면 아무 것도 표시되지 않습니다. – dtech

+0

그의 예에서는 컨테이너를 수정하지 않습니다. –

관련 문제