2016-11-29 6 views
0

上記のコードでは、memset呼び出し時にG ++でエラーが発生しています(error: expected constructor, destructor, or type conversion before '(' token)。"エラー:予期しないコンストラクタ、デストラクタ、または型変換の前に '(memset呼び出しの位置に'トークン ')

#include<iostream> 
#include<stdlib.h> 
#include<utility> 
#include<algorithm> 
#include<list> 
#include<cstring> 
#include<vector> 
#include<algorithm> 
using namespace std; 

int visited[1000]; 
memset(visited,0,sizeof(visited)); 
^ //This is where the error points to. 

void dfs(vector< list< pair<int,int> > > graph,int u) 
{ 
    visited[u]=1; 
    cout<<u<<" "; 

    list< pair<int,int> >::iterator x=graph[u].begin(); 
    for(;x!=graph[u].end();x++) 
     if(!visited[x->first]) 
      dfs(graph,x->first); 
} 

int main() 
{ 
    int v,e; 
    cout<<"Vertices,edges?\n"; 
    cin>>v>>e; 
    vector< list< pair<int,int> > > graph(v+1); 
    for(int i=1;i<=e;i++) 
    { 
     int source,dest,weight; 
     cin>>source>>dest>>weight; 
     graph[source].push_back(make_pair(dest,weight)); 
    } 
    list< pair<int,int> >::iterator p; 
    int i=1; 
    while(i<=v) 
    { 
     p=graph[i].begin(); 
     for(;p!=graph[i].end();p++) 
      cout<<i<<" "<<p->first<<" : weight is "<<p->second<<"\n"; 
     i++; 
    } 
    dfs(graph,1);cout<<"\n"; 
    return 0; 
} 

私は練習をコーディング/私のコードを改善するあなたがヒントを提供することができればそれはまた、本当に役立つだろう。ありがとう!

答えて

3

std::memset、任意の関数の場合のように、唯一の中に呼び出すことができます機能

あなたが私の意味を持っているならば、それを単に "グローバルスコープ"で呼び出すことはできません。それがコンパイラを混乱させます。

具体的なケースでは、グローバル変数がC++でゼロ初期化されているため、memsetコールは必要ありません。

また、#include<stdlib.h>をC++ヘッダー#include <cstdlib>に置き換えることを検討してください。

+2

また、「visited」は開始時にはゼロで埋められている(グローバルである)ことを理解してください。私。 'memset'は意味がありません。 – WhozCraig

+0

それをニックにして、wiki'dの答え。 – Bathsheba

関連する問題