[英]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.