首页 > 解决方案 > 错误 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;
}

标签: c++algorithmmultidimensional-arraystdvectorbreadth-first-search

解决方案


vector<int> adj[V];
//          ^^^^^^

是一个可变长度数组,它不是 C++ 标准的一部分。阅读更多:为什么可变长度数组不是 C++ 标准的一部分?,

您不应该这样做,即使某些编译器扩展可以支持它。似乎您的编译器也不支持它/默认情况下编译器扩展已关闭。因此,错误!


你能告诉我如何解决吗?

您可以改用

std::vector<std::vector<int>> adj(V, std::vector<int>{});

它是一个向量 integers 的向量,具有V默认的 initialized 数量std::vector<int>{}。您的所有功能都必须相应地调整更改。

作为旁注,看看:为什么“使用命名空间标准;” 被认为是不好的做法?


推荐阅读