2014-02-23 4 views
0

Note의 QSharedPointer 요소가 포함 된 m_noteList이라는 QList 멤버 변수가 있습니다. 새 메모를 작성하는 경우QList 및 QSharedPointer의 참조 된 요소에 대한 액세스

private: 
    QList< QSharedPointer<Note> > m_noteList; 

, 해당 참조 목록에 추가됩니다 :

각 주-요소에 대해
void Traymenu::newNote(){ 
    QSharedPointer<Note> note(new Note(this)); 
    m_noteList << note; 
} 

이 whichs 포인터가 m_noteList에, 나는 그것의 제목을 얻고 그것을 추가 할 내 contextmenu. 목적 메모를 열고 해당 제목을 클릭하는 것입니다

for (int i = 0 ; i < m_noteList.count() ; i++) { 
    std::string menuEntryName = m_noteList[i].getTitle(); 
    QAction *openNote = m_mainContextMenu.addAction(menuEntryName); 
} 

내가

C:\project\traymenu.cpp:43: Fehler: 'class QSharedPointer<Note>' has no member named 'getTitle' 
    std::string menuEntryName = &m_noteList[i].getTitle(); 
               ^

는 기본적으로 나는 m_noteList에서 참조하는 개체에 대한 액세스를 얻으려면 오류가 발생합니다. 어떻게해야합니까? 나는 그 요소에 접근하기 위해 m_noteList[i]으로 생각했지만, 분명히 컴파일러는 QSharedPointer 타입의 무엇인가를 기대하고있다. 왜?

+0

목처럼 뭔가를 할 수 e 오류는'QSharedPointer'가'getTitle' 메소드를 가지고 있지 않다고 말합니다. 사실입니다. 'Note' 클래스의 멤버에 액세스하기 위해 포인터를 역 참조해야합니다 :'m_noteList [i] .data() -> getTitle(); ' – Kiwi

+0

아, 그래서 이것이 작동하는 방식입니다. 고마워요, 대답을 올리시겠습니까? – user2366975

답변

1

QSharedPointer은 기본적으로 포인터를 래핑합니다. 따라서 '.'문자로 직접 액세스 할 수 없습니다. 이 오류가 발생하는 이유는 다음과 같습니다. getTitleQSharedPointer 클래스의 일부가 아닙니다.

  1. data :

    그러나 당신은 실제 포인터를 검색 할 수있는 다양한 방법이없는 간단한 방법을하지만, 명시 적으로, 그리고 때로는

  2. operator->을 중요한 : 그래서 당신은 실제 포인터처럼 QSharedPointer을 사용할 수 있습니다 m_noteList[i]->getTitle();
  3. operator*는 : (*m_noteList[i]).getTitle();