2012-07-01 3 views
0

QList를 편집 할 수있는 몇 가지 함수가있는 다른 클래스의 인스턴스에 대한 포인터를 소유하는 클래스에 저장된 단일 QList가 있습니다. C++의 여러 클래스에서 하나의 QList를 편집 할 수 있습니다. 목록에서 요소를 제거 할 때 클래스 A의 myvariable 변수에서도 제거하려고합니다. 코드는 아래와 같습니다다른 함수에서 동일한 QList 편집

class classA { 
    ... 

private: 
    ClassB *myclass; 
    QList<mytype> myvariable; 
} 

class classB { 
    classB::classB(QList<mytype> &variable) { 
     this->myvariable = variable; 
    } 

    ... 

private: 
    QList<mytype> myvariable; 
} 
+0

당신이 "하나"QList를 말할 때, 프로세스 당 하나 또는 객체 인스턴스 당 하나의 점이다? "여러 클래스"라고 할 때, 같은 클래스의 여러 객체 인스턴스를 의미합니까? 또는 정말로 모든 클래스에서 하나의 QList에 액세스 할 수있게하려면? 모든 클래스가 단일 인스턴스에 액세스 할 수있게하려면 QList를 전역 변수로 만드는 것이 좋습니다. –

+0

QList는 A와 B 두 클래스 사이에서 공유되어야합니다. 그러나 클래스 A는리스트의 인스턴스를 소유합니다. – Stefano

+0

FYI, myclass는 myclass를 소유하고 있다면 아마도 std :: unique_ptr myclass이어야합니다. – Zac

답변

2

당신은 개조하면 되겠 단 몇 매우 가깝습니다. myvariable는 참조 확인하고 다음과 같이 ClassB가의 생성자에서 초기화 :

class classB 
{ 
    classB(QList<mytype> &variable) 
    : myvariable(variable) 
    { 
    } 

private: 
    QList<mytype>& myvariable; 
} 
+0

그것은 단지 몇 가지 작업을한다 : 이것이 내가 원하는 것을 할 수있는 유일한 방법인가? 이 모든 것들을 가지고 있고 그런 식으로 변수 myvariable을 초기화하는 것은 약간 추한 것 같습니다. – Stefano

+1

이것은 C++입니다. 다른 방법으로 그것을 할 수 있습니다! :-)이 구현에는리스트의 수명이'classB'보다 길다고 가정 할 때 위험합니다. 실제로 포인터의 소유권을 공유하려는 경우 포인터 또는 더 나은 아직 스마트 포인터를 사용할 수 있습니다. 더 많은 코드를 공유하는 경우 성취하려는 것을 디자인 할 때 더 많은 제안을 할 수 있습니다. – Zac

+0

그러나 초기 질문에 직접 답하는 것이 가장 쉬운 방법입니다. – Zac

0

정적 qlist를 보유하고있는 클래스 c를 도입 할 수 있습니다. 그런 다음 클래스 a와 클래스 b의 공통 하위 클래스로 만듭니다.

편집 :

class classC { 
protected: 
    static QList<mytype> mystatic; 
}  

class classA : public classC { 
private: 
} 

class classB : public classC { 
    classB::classB(QList<mytype> &variable) { 
     mystatic = variable; 
    } 
} 
+0

아니요, 내가 게시 한 방식으로 생성자를 통해 QList를 전달해야합니다. 나는 내가 원하는 것을 할 수 있다고 생각하지만, 어떻게 해야할지 모르겠다. – Stefano

+0

Dont YouTube가 어떻게 간섭해야하는지 보아라. 내 제안을 안락사. 생성자를 통해 qlist를 전달한 다음 Stativ 멤버에 할당 할 수 있습니다. – Matthias

+0

일반 텍스트 : 생성자를 통해 QList를 전달해야 할 필요가 어떻게 제 제안을 방해하는지 보지 못합니다. QList를 생성자를 통해 전달한 다음 정적 멤버에 할당 할 수 있습니다 (비 정적 멤버에 할당하는 것과 마찬가지로). (첫번째 코멘트에서 불분명 한 코멘트에 대해 유감스럽게 생각한다) – Matthias

관련 문제