2017-09-07 2 views
0

std::vector 안에 엔티티를 반환하고 싶지만 컴파일러가 삭제 된 함수를 참조하고 있다고 알려줍니다.삭제 된 함수 참조하기 배열

vector<unique_ptr<Node>> children;  //member of a class 

unique_ptr<Node> Node::selectNext() { //function for a class 
    for (int i = 0; i < children.size(); i++) { 
     if (children[i]->getUI().mouseSelect()) 
      return children[i];   //Problem is in this return statement 
    } 
    return nullptr; 
} 

나는 스마트 포인터와 충돌합니다.

이것은 비교적 쉽게 해결할 수있는 문제이지만, 내가 잘못했는지 확실하지 않습니다. 이 클래스는 노드 클래스이므로 문제가 이보다 클 수 있습니다.

+1

문제를 재현하려면 * 완전한 * 코드를 제공해야합니다. 컴파일러 오류는 포함시켜야하는 매우 기본적인 것입니다. 우리는 당신의 모니터를 볼 수 없다. – cdhowie

+1

불가능한 포인터를 복사하려고합니다. 수정 사항은 실제로 필요한 것에 달려 있습니다. – Sopel

답변

4

고유 한 ptrs를 공유 할 수 없습니다.

Node* Node::selectNext() { //function for a class 
    for (int i = 0; i < children.size(); i++) { 
    if (children[i]->getUI().mouseSelect()) 
     return children[i].get(); 
    } 
    return nullptr; 
} 
+0

대단히 감사합니다! 그 점에 대해 생각할 때 그것은 실제로 많은 의미를 갖습니다. –

+0

노드 포인터를 전달하려는 경우'std :: unique_ptr' 대신'std :: shared_ptr'을 사용하는 것이 더 좋습니다 –

+0

@RemyLebeau 아니요, 공유 포인터로 "주위를지나 가게됩니다" 문제. 음, 정규 표현식처럼 HTML 파싱 문제를 해결합니다. 공유 포인터는이 개체의 수명을 명시 적으로 공유 관리하에두기를 원한다는 것을 의미합니다. 이는 99/100의 경우를 간소화하는 가정이 아닙니다. 트리가 관리하는 트리의 노드 수명은 간단한 모델입니다. 평생 동안 모든 매달려있는 포인터의 조합이되는 것은 매우 복잡한 모델입니다. – Yakk

관련 문제