2017-10-29 70 views
0

我想要刪除嵌套在數組中另一個類中的類。我得到一個智能感知錯誤,指出:刪除時發生錯誤:表達式必須是指向完整對象類型的指針

「表達式必須是一個指向一個完整的對象類型」

我試圖通過創建一個指向對象和可視化的參考刪除它的另一種方式工作室出錯,並給我一個DLL錯誤,基本上說明調試符號不加載。

以下是代碼片段 -

graphl.cpp

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;   
}; 

如果我試圖rmND = rmGN-> data;刪除rmND; Visual Studio給了我一個wntdll.pdb未加載的錯誤。如何正確刪除該對象?任何幫助表示讚賞!謝謝。

+0

偏離主題,但數組下標從0到N-1,而不是1到N. – chris

+0

0爲NULL。它未被使用,因此沒有任何事情發生在它。對象從1-N插入。 – endanegered

+0

@endanegered - * 0爲NULL。它的未使用,因此沒有發生任何事情* - 我看到太多的程序失敗,因爲他們試圖僞造基於1的陣列。無論是'0'元素是否被偶然使用,或者索引在數組末尾都是一次性的。只需以'0'開始你的數組。 – PaulMcKenzie

回答

0

您嘗試刪除的項目不是指向動態內存的指針,它是對象的本地對象,因此必須刪除父對象才能清除內存。

更準確地說,您只能刪除使用new關鍵字顯式創建的一段內存。

無需刪除對象。

相關問題