簡體   English   中英

C ++中預期的嵌套名稱說明符錯誤

[英]expected nested-name-specifier error in C++

我編寫了一些類來實現樹ADT,該樹ADT存儲邊緣和節點之一的兩個集合。 它存儲的是SSet類,它們是使用set庫的接口。

工作人員將類的概述以及SSet.H交給了我們,我編寫了函數。

行號103(函數GenGraphTemp::RemoveEdge ),編譯器(g ++)告訴:

expected nested-name-specifier before NodeEdge
expected ',' or '...' before '&' token
ISO C++ forbids declaration of 'NodeEdge' with no type

還針對RemoveEdge之后的功能說:

expected ';' before "const" expected ';' before "const"第106行的expected ';' before "const"

expected ';' before "SSet" expected ';' before "SSet"expected ';' before "const" expected ';' before "const"第120行的expected ';' before "const"

expected ';' before "friend" expected ';' before "friend"第134行的expected ';' before "friend"

#include "sset.H"

using namespace std;

#define EQ(a1,a2) (!(a1 < a2) && !(a2 < a1))
#define MAX(a1,a2) ((a2<a1)?a1:a2)
#define MIN(a1,a2) ((a1<a2)?a1:a2)

template <class Node>
class Edge {
public:
    ...

protected:
    Node _start;
    Node _end;
};


template <class Node>
class GenGraphTemp {
public:

    // Adds a new node to the nodes set
    bool AddNode (const Node& n1){return _nodes.Add(n1);}

    // Removes a node from the nodes set and all edges connected to it
    bool RemoveNode (const Node& n1) {
        int edges_size = _edges.Size();
        int i;
        Edge const *epointer;
        //remove edges connected to n1
        for (i=0;i<edges_size;i++){
            (((i==0)? *epointer=_edges.GetFirst(): *epointer=_edges.GetNext()));
            if (EQ(epointer->GetStart(),n1)||EQ(epointer->GetEnd(),n1)){
                (_edges.Remove(*epointer)==false) && (return false);
            }
        }
        // remove node
        return _nodes.Remove(n1);
    }

    // Add a new edge to the edges set
    bool AddEdge (const Node& n1, const Node& n2) {

        (EQ(n1,n2)) && (return false);

        if ((_nodes.IsIn(n1)) && (_nodes.IsIn(n2))){
            typename NodeEdge edge(n1,n2);
            return _edges.Add(edge);
        }
        return false;
    }

    // Removes an edge from edges set
    bool RemoveEdge (const typename NodeEdge& e1) {return _edges.Remove(e1);}

    // Check if two nodes are connected
    bool RConnected const (const Node& n1, const Node& n2) {
        Edge const *epointer;
        int edges_size = _edges.Size();
        int i;
        for (i=0; i<edges_size; i++){
            ((i==0)? *epointer=_edges.GetFirst(): *epointer=_edges.GetNext());
            if (EQ(epointer->GetStart(),MIN(n1,n2)) && EQ(epointer->GetEnd(),MAX(n1,n2))){
                return true;
            }
        }
    }

    // Return a set of all the nodes that are connected to the input node through an edge
    // if the node does not have ant neighbours, the function will return an empty set
    SSet<Node>* Neighbours const (const Node& n1) {
        Edge const *epointer;
        int i, edge_size;
        SSet<Node>* neighbours = new SSet<Node>;
        edge_size=_edges.Size();
        for (i=0; i<edges_size; i++){
            ((i==0)? *epointer=_edges.GetFirst(): *epointer=_edges.GetNext());
            if (EQ(epointer->GetStart(),n1)||EQ(epointer->GetEnd(),n1)){
                (neighbours->IsIn(*epointer)) || (neighbours->Add(*epointer);
            }
        }
        return neighbours;
    }

    friend ostream& operator<<(ostream& os, GenGraphTemp<Node>& gr)
    {
        os << "Nodes:\n" << gr._nodes << "Edges:\n" << gr._edges;
        return os;
    }


protected:
    typedef Edge<Node> NodeEdge;
    SSet<Node> _nodes;
    SSet<NodeEdge> _edges;
};

我不明白問題出在什么地方和什么地方。

編輯:

我刪除了Edge類的函數和運算符的實現,以減少行數。 我沒有刪除GenGraphTemp類的實現,因為我不知道問題出在其中之一還是其​​他地方。

我還嘗試在備注中使用每個“良好”函數來編譯代碼,但這沒有幫助。

// Removes an edge from edges set
bool RemoveEdge (const typename NodeEdge& e1) {return _edges.Remove(e1);}

// Check if two nodes are connected
bool RConnected const (const Node& n1, const Node& n2) {

使

// Removes an edge from edges set
bool RemoveEdge (const NodeEdge& e1) {return _edges.Remove(e1);}

// Check if two nodes are connected
bool RConnected (const Node& n1, const Node& n2) const {

等等...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM