2016-10-09 4 views
0

私は自分のプロジェクトに以下の2つのファイルを使用しています。私が参照している変数、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

親がdefreferencing前にnullであるかどうかを確認する必要があります。

としてあなたの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

私はそれがsetParent(..)ではなくgetParent(..)、それを引き起こす可能性があるかどうかはわかりません。 – AppreciateIt

関連する問題