2011-10-16 155 views
-1

以下C++深度優先搜索程序不會編譯。深度優先搜索算法實現

#include <iostream> 
using namespace std; 

class Stack 
{ 

private: 
     const int size=20; 
     int *st; 
     int top; 
public : 
     Stack(){ 
    st =new int[size]; 
    top=-1; 

     } 
     ~Stack(){ 
      delete[] st; 
      top=-1; 
     } 
     void push(int j){ 
      st[++top]=j; 
       } 
     int pop(){ 
      return st[top--]; 
     } 
     int peek(){ 

      return st[top]; 

     } 
     bool empthy(){ 
      return (top==-1); 

     } 
}; 
class Vertex{ 
public: 
    char label; 
    bool visited; 
public: 
    Vertex(){ 


    } 
    Vertex(char lab){ 
     label=lab; 
     visited=false; 

    } 
    }; 
class Graph{ 
private: 
     const int maxvertex=20; 
     Vertex* vertexlist; 
     int **adj; 
     int nverts; 
     Stack *stack; 
public: 
    Graph(){ 
    vertexlist=new Vertex[maxvertex]; 
    adj=new int*[maxvertex]; 
    for (int i=0;i<20;i++) 
      adj[i]=new int[maxvertex]; 
    nverts=0; 
     for (int i=0;i<maxvertex;i++){ 
      for (int j=0;j<maxvertex;j++){ 
       adj[i][j]=0; 
      } 
      } 

     stack=new Stack(); 
    } 
    void add(char lab){ 

     vertexlist[nverts++]=new Vertex(lab); 
    }1 




}; 
int main(){ 








    return 0; 
} 

以下是編譯錯誤,我越來越:

> 6 IntelliSense: no operator "=" matches these 
> operands c:\users\datuashvili\documents\visual studio 
> 2010\projects\dfs\dfs\dfs.cpp 76 23 DFS  7 IntelliSense: expected a 
> declaration c:\users\datuashvili\documents\visual studio 
> 2010\projects\dfs\dfs\dfs.cpp 77 3 DFS Error 1 error C2864: 
> 'Stack::size' : only static const integral data members can be 
> initialized within a class c:\users\datuashvili\documents\visual 
> studio 2010\projects\dfs\dfs\dfs.cpp 8 1 DFS Error 3 error C2864: 
> 'Graph::maxvertex' : only static const integral data members can be 
> initialized within a class c:\users\datuashvili\documents\visual 
> studio 2010\projects\dfs\dfs\dfs.cpp 54 1 DFS Error 2 error C2758: 
> 'Stack::size' : must be initialized in constructor base/member 
> initializer list c:\users\datuashvili\documents\visual studio 
> 2010\projects\dfs\dfs\dfs.cpp 12 1 DFS Error 4 error C2758: 
> 'Graph::maxvertex' : must be initialized in constructor base/member 
> initializer list c:\users\datuashvili\documents\visual studio 
> 2010\projects\dfs\dfs\dfs.cpp 60 1 DFS Error 5 error C2679: binary '=' 
> : no operator found which takes a right-hand operand of type 'Vertex 
> *' (or there is no acceptable conversion) c:\users\datuashvili\documents\visual studio 
> 2010\projects\dfs\dfs\dfs.cpp 76 1 DFS 
+2

你的代碼似乎缺少很多行,並且它顯然不會崩潰,因爲它不能編譯。特別是錯誤的第一行缺失。 – thiton

回答

2

變化

const int size=20; 

static const int size=20; 

(靜態意味着它會被一次每類進行初始化,而不是每個需要的對象初始化列表)


vertexlist[nverts++]=new Vertex(lab); 

你試圖將Vertex設置爲Vertex*。這不會編譯。

+0

這不是你如何初始化C++中的常量或靜態成員(至少在2011年11月16日之前沒有完全符合編譯器的C++ 11之前) –

+1

@TamasSzelei你是什麼意思? 'static const int size = 20;'是合法的。 – Pubby

+0

你說得對,我在考慮靜態成員(與靜態const成員相反)。 –