在上面的代码中,我在memset调用时遇到G ++错误,说error: expected constructor, destructor, or type conversion before '(' token
。可能的原因是什么?
#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;
}
如果您能为我提供改进代码/编码实践的提示,那将会非常有用。谢谢!
答案 0 :(得分:4)
std::memset
只能在函数中调用。
如果你理解了我的意思,你就不能简单地在全球范围内调用它。&#34; global scope&#34;这让编译器感到困惑。
在您的特定情况下,您不需要memset
调用,因为全局变量在C ++中已初始化为零。
还要考虑用C ++标题#include<stdlib.h>
替换#include <cstdlib>
。