布尔值通过引用传递,但是我仍然在cpp中遇到编译错误

时间:2019-07-11 13:12:06

标签: c++

我正在编写用于在无向图中查找循环的代码,但是尽管我已经声明了名为“ vis”的数组,但仍存在编译错误。

int dfs(vector<int> adj[], int v, bool[] &vis) {
    vis[v]=true;

    for(int x : adj[v]){
        if(vis[x]==true) return 1;
        vis[x] = true;
        dfs(adj, x, vis);
    }

    return 0; 
}

bool isCyclic(vector<int> adj[], int V) {
    // Your code here
    bool vis[V];

    cout << dfs(adj, V, vis);
}

出现以下错误:-

prog.cpp:11:40: error: expected ',' or '...' before '&' token
 int dfs(vector<int>adj[],int v ,bool[] &vis){



prog.cpp: In function 'int dfs(std::vector<int>*, int, bool*)':


prog.cpp:12:5: error: 'vis' was not declared in this scope
     vis[v]=true;

2 个答案:

答案 0 :(得分:0)

bool[]传递给函数就足够了。 bool[]实际上是bool*,通过它您可以修改数组中的元素。

答案 1 :(得分:0)

这里有多个问题。我认为关于数组如何工作以及它们的语法是什么感到困惑。

默认情况下,原始数组通过引用传递。与普通变量不同,传递时不复制数组。

实际上,接收指针或数组的函数是等效的:

void frob(bool a[]); // both equivalent.
void frob(bool* a); // same function.

因此,将您的功能更改为此签名应该可以轻松工作:

int dfs(vector<int> adj[], int v, bool vis[]) {
    // ...
}

此外,运行时大小的数组也不是标准功能。您应该改用向量。

// V is not constexpr, you should use vector
bool vis[V];

以下是构建和传递矢量的方法:

int dfs(vector<int> adj[], std::vector<bool>& vis) {
    int v = vis.size();
    // ...
}

bool isCyclic(vector<int> adj[], int V) {
    // Your code here
    std::vector<bool> vis(V);

    cout << dfs(adj, vis);
}