布尔值是通过引用传递的,但我仍然在 cpp 中遇到编译错误
Boolean is passed by reference but still i am getting compilation error in cpp
我正在编写用于在无向图中查找循环的代码,但是尽管我已经声明了名为"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);
}
相关文章:
- 在cygwin中测试新的boost安装时出现cpp错误
- holeMenuProgram.cpp:38:1 错误:'}'令牌之前的预期主表达式
- .h 和.cpp文件分离时出错,但仅使用 .h 文件时没有错误.我做错了什么?
- 输出错误,问题是找到总和5000位数字cpp
- 套接字连接"Operation not permitted"错误,甚至使用升压/平发器根.cpp
- 在头文件和 cpp 文件中使用一次 #pragma 时出现结构重定义错误
- 我在 .h 中有一个枚举类,并且在.cpp错误中有一个运算符重载:与"运算符<<不匹配
- 主.cpp:18:20:错误:从"int*"转换为"int"会失去精度 [-fa
- C++ 编译器错误:P1LinkedList.cpp:145:错误:重载的"to_string(int&)"调用不明确
- 处理简单 cpp 类构造函数中的错误
- CMake 错误:链接器命令失败,退出代码为 1 和 cpp.o 文件
- 创建 OpenCV 非自由版本 v4.3 时出错,可折叠.cpp错误 C2039、2605
- 在调试模式下编译时qrc_resource.cpp错误
- Cpp 错误中的<<运算符
- CPP 错误 LNK2019:未解析的外部符号 CPP
- CS106b 库矢量.cpp错误 C2143:语法错误:'<'之前缺少';'
- 重载新运算符时的 CPP 错误
- .cpp错误:与"std::cerr "中的"运算符<"不匹配<"正在转换文件 \" ""
- Cpp错误,包括Visual studio 2012中的多个文件
- 编译cocos2d-x插件时出现Cpp错误