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

Boolean is passed by reference but still i am getting compilation error in cpp

本文关键字:cpp 错误 编译 遇到 引用 布尔值      更新时间:2023-10-16

我正在编写用于在无向图中查找循环的代码,但是尽管我已经声明了名为"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;

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

这里有多个问题。我认为数组如何工作以及它们的语法是什么存在混淆。

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

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

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);
}