配列内の別のクラスにネストされているクラスを削除しようとしています。私は、オブジェクトの参照へのポインタを作成することによって、それを別の方法を削除しようとしたビジュアルまし削除時のエラー:式は完全なオブジェクト型へのポインタである必要があります
を
「という表現は、完全なオブジェクト型へのポインタでなければならない」:私は述べインテリセンスのエラーを取得しますStudioのエラーが出て、基本的にはデバッグシンボルがロードされていないことを示すdllエラーが表示されます。
graphl.cpp IはrmNDを試みた場合
GraphL::~GraphL()
{
NodeData* rmND; // remove NodeData
GraphNode* rmGN; // remove GraphNode
for (int i = 1; i <= size; i++)
{
deleteEdges(adjList[i]->edgeHead);
rmGN = adjList[i];
delete rmGN->data; //////////////// <-- error here
rmGN->edgeHead = nullptr;
delete rmGN;
}
delete[] adjList;
}
graphl.h
class GraphL {
public:
GraphL();
~GraphL();
void buildGraph(istream& infile);
void depthFirstSearch();
//void displayGraph();
private:
struct EdgeNode {
int adjGraphNode;
EdgeNode* nextEdge;
EdgeNode() : adjGraphNode(0), nextEdge(nullptr) {};
};
struct GraphNode {
EdgeNode* edgeHead;
NodeData data;
bool visited;
GraphNode() : edgeHead(nullptr), visited(false) {};
};
static const int MAXNODES = 6;
GraphNode* adjList[MAXNODES]{}; // adjacency list
//void makeEmpty();
int size;
bool insertEdge(int from, int to);
void dfsHelper(int search);
void deleteEdges(EdgeNode* remove);
};
nodedata.h
class NodeData {
friend ostream & operator<<(ostream &, const NodeData &);
public:
NodeData(); // default constructor, data is set to an empty string
~NodeData();
NodeData(const string &); // data is set equal to parameter
NodeData(const NodeData &); // copy constructor
NodeData& operator=(const NodeData &);
// set class data from data file
// returns true if the data is set, false when bad data, i.e., is eof
bool setData(istream&);
bool operator==(const NodeData &) const;
bool operator!=(const NodeData &) const;
bool operator<(const NodeData &) const;
bool operator>(const NodeData &) const;
bool operator<=(const NodeData &) const;
bool operator>=(const NodeData &) const;
private:
string data;
};
-
は、ここでは、コードの断片であります= rmGN-> data; rmNDを削除します。 Visual Studioはwntdll.pdbにロードされていないエラーを表示します。そのオブジェクトを適切に削除するにはどうすればよいですか?どんな助けもありがとう!ありがとうございました。
オフトピックですが、配列インデックスは0からN-1に、1からNにはなりません。 – chris
0はNULLです。使用されていないので、それには何も起こりません。オブジェクトは1-Nから挿入されました。 – endanegered
@endanegered - * 0はNULLです。使用されていないので、何も起こりません* - あまりにも多くのプログラムが失敗したのは、1ベースの配列を偽造しようとしているからです。その「0」要素が誤って使用されたか、配列の最後にインデックスが1回だけ表示されます。配列を '0'で始めるだけです。 – PaulMcKenzie