2016-10-09 2 views
0

내 프로젝트에 아래의 두 파일을 사용하고 있습니다. 내가 참조하고있는 변수 Node parent은 원래 포인터가 아니었지만, 나는 이것이 명백한 이유로 (메모리) 작동하지 않는다는 것을 빨리 알았다.변수가 속한 클래스와 같은 유형의 변수를 올바르게 처리하는 방법은 무엇입니까?

그래서 포인터로 바꿨습니다. 문제는 parent이 내 코드에서 제대로 처리되지 않는 것처럼 보이므로 getParent()와 같은 함수를 실행할 때 응용 프로그램이 충돌하는 것으로 끝납니다. 어떤 수정이이 문제를 해결할 것입니까?

Node.h

#include <string> 
#include <vector> 
#include <iostream> 
#include "Action.h" 
class Node 
{ 

Node.cpp

#include "stdafx.h" 
+1

성능을 위해서는'std :: string title'을'const std :: string & title'으로 변경해야합니다. –

+1

참조로 매개 변수를 전달하는 방법을 배워야합니다. –

+0

더 나은 성능': title (std :: move (title))':) @EdHeal 성능상의 이점이 없다고 생각합니다. 컴파일러는 최적화를 수행 할 수 없으며 대신 복사본을 만들어야합니다. – Rakete1111

답변

0

부모가 null 여부를 defreferencing 이전 인 경우가 확인해야합니다. 같은의 getParent의

변환 서명 : 당신이 그것을 액세스 할 때마다

Node* Node::getParent() 

Node* Node::getParent() { 
    return parent; 
} 

그리고 응용 프로그램에서 먼저 확인하십시오.

Node * parent = getParent(); 
if(parent==nullptr){ 
    cout << "parent is null\n"; 
    raise error; 
}else{ 
    // do whatever you want 
} 
1

parentnullptr되지 않거나 확인해야 : 당신이 Node의 적절한 복사 생성자가 필요하다 구현해야

bool Node::getParent(Node& node) 
{ 
    if (parent) 
    { 
     node = *parent; 
     return true; 
    } 
    else 
    { 
     return false; 
    } 
} 

참고. 가능한 해결책은 포인터 또는 부모 노드의 참조를 반환하는 것이지만 몇 가지 구현에서는 내부 멤버에 직접 액세스 할 수 있으므로 위험합니다. 당신에게 좋은 것을 결정하십시오.

그냥 제안 : std :: sharer_ptr 또는 std :: unique_ptr을 사용하는 경우 구현이 훨씬 쉽습니다.

+0

부모가 제대로 할당되지 않은 이유는 무엇입니까? 모든 속성을 전달하는 복사 생성자를 추가했습니다. 그 기본적으로 빈 문자열과 자식, 부모, 작업 등 노드가 – AppreciateIt

+0

getParent (...) 메서드에서? 'parent' 멤버가 nullptr이 아니라고 확신합니까? 아마도 일부 코드 스 니펫이 도움이 될 수 있습니다. –

+0

getParent (..)보다는 setParent (..)와 관련 있다고 생각합니다.), 그러나 그것을 일으킬 수 있는지 확실하지 않습니다. – AppreciateIt

관련 문제