c++ - 错误 E0028 表达式必须有一个常量值
问题描述
错误 E0028 表达式必须有一个常数。你能告诉我如何解决吗?
int V = 5;
vector<int> adj[V];
这是完整的代码:
#include <iostream>
#include <list>
#include <vector>
using namespace std;
void addEdge(vector<int> adj[], int u, int v)
{
adj[u].push_back(v);
}
void BFSUtil(int u, vector<int> adj[],
vector<bool>& visited)
{
list<int> q;
visited[u] = true;
q.push_back(u);
while (!q.empty()) {
u = q.front();
cout << u << " ";
q.pop_front();
for (int i = 0; i != adj[u].size(); ++i) {
if (!visited[adj[u][i]]) {
visited[adj[u][i]] = true;
q.push_back(adj[u][i]);
}
}
}
}
void BFS(vector<int> adj[], int V)
{
vector<bool> visited(V, false);
for (int u = 0; u < V; u++)
if (visited[u] == false)
BFSUtil(u, adj, visited);
}
int main()
{
int V = 5;
vector<int> adj[V];
addEdge(adj, 0, 4);
addEdge(adj, 1, 2);
addEdge(adj, 1, 3);
addEdge(adj, 1, 4);
addEdge(adj, 2, 3);
addEdge(adj, 3, 4);
BFS(adj, V);
return 0;
}
解决方案
vector<int> adj[V];
// ^^^^^^
是一个可变长度数组,它不是 C++ 标准的一部分。阅读更多:为什么可变长度数组不是 C++ 标准的一部分?,
您不应该这样做,即使某些编译器扩展可以支持它。似乎您的编译器也不支持它/默认情况下编译器扩展已关闭。因此,错误!
你能告诉我如何解决吗?
您可以改用
std::vector<std::vector<int>> adj(V, std::vector<int>{});
它是一个向量 int
egers 的向量,具有V
默认的 initialized 数量std::vector<int>{}
。您的所有功能都必须相应地调整更改。
作为旁注,看看:为什么“使用命名空间标准;” 被认为是不好的做法?
推荐阅读
- python - 如何绘制一类 SVM 的决策边界?
- android-studio - 修复 Android Studio 单选按钮错误
- mysql - MySQL 时间戳的平均值,现在以秒为单位
- heroku-cli - 如何在 MacOS 上不使用 HomeBrew 安装 Heroku CLI
- javascript - 每秒更改文本颜色
- php - 在 WooCommerce 结帐中为特定选择的运输方式添加正文类
- swiftui - 在视图控制器中创建 Publishable 属性,将其传递给 SwiftUI 视图并监听视图控制器内部的更改?
- javascript - 如何将所有 javascript 输出保存到 txt 文件中以备后用?
- url - 更改 Jekyll 站点 baseurl 而不破坏现有帖子的链接
- python - 将数据放在规模上(并减少最高数字的力量)