标识符"V 未定义

Identifier "V'' is undefined

本文关键字:未定义 标识符      更新时间:2023-10-16

我在C++年创建了一个贪婪的着色程序。运行此代码时,我收到错误:标识符 V 在第 39 行代码"int result[V];"上未定义。我在第 46 行"bool available[V]"上有相同的变量,但我在那里没有收到错误。我认为这与我使用的向量有关,但我不确定。任何帮助将不胜感激。

#include "stdafx.h"
#include <iostream>
#include <list>
#include <vector>
using namespace std;
class Graph
{
vector<list<int>> adj;
public:
Graph(int V);
~Graph(){}

void addEdge(int v, int w);
void greedyColoring(vector<bool>& available);
};
Graph::Graph(int V)
{
adj.resize(V);
}
void Graph::addEdge(int v, int w)
{
adj[v].push_back(w);
adj[w].push_back(v);
}
void Graph::greedyColoring(vector<bool>& available)
{
int result[V];
result[0] = 0;
for (int u = 1; u < V; u++)
result[u] = -1;
bool available[V];
for (int cr = 0; cr < V; cr++)
available[cr] = false;
for (int u = 1; u < V; u++)
{
list<int>::iterator i;
for (i = adj[u].begin(); i != adj[u].end(); ++i)
if (result[*i] != -1)
available[result[*i]] = true;
int cr;
for (cr = 0; cr < V; cr++)
if (available[cr] == false)
break;
result[u] = cr;
for (i = adj[u].begin(); i != adj[u].end(); ++i)
if (result[*i] != -1)
available[result[*i]] = false;
}
for (int u = 0; u < V; u++)
cout << "Vertex " << u << " ---> Color"
<< result[u] << endl;
}

int main()
{
Graph g(6);
g.addEdge(0, 1);
g.addEdge(0, 4);
g.addEdge(0, 5);
g.addEdge(1, 3);
g.addEdge(1, 4);
g.addEdge(2, 3);
g.addEdge(2, 4);
g.addEdge(4, 5);
cout << "Coloring of the graph n";
g.greedyColoring();
return 0;
}
  1. 你的类没有名为V的数据成员,因此当你引用 稍后在您的方法中V,只是没有这样的数据成员 现存。在类中声明类型为int的数据成员。
  2. 之后,您需要删除该方法的参数greedyColoring()available因为你在 同样方法的主体。如果不删除参数, 然后你会有一个名为available的参数,用于隐藏一个 名为available的自动变量。但我想你这样做了 您努力修复有关V的错误。
  3. 可变长度数组不是标准C++,所以你不能说int result[V];,但你可以改用std::vector,并且 将其大小调整为V大小,然后使用[]运算符,或者 随时推回元素(例如在 for 循环中(。

将所有内容放在一起,您将获得:

#include <iostream>
#include <list>
#include <vector>
using namespace std;
class Graph
{
int V;
vector<list<int>> adj;
public:
Graph(int V);
~Graph(){}

void addEdge(int v, int w);
void greedyColoring(void);
};
Graph::Graph(int V) : V(V)
{
adj.resize(V);
}
void Graph::addEdge(int v, int w)
{
adj[v].push_back(w);
adj[w].push_back(v);
}
void Graph::greedyColoring(void)
{
vector<int> result;
result.push_back(0);;
for (int u = 1; u < V; u++)
result.push_back(-1);
vector<bool> available;
for (int cr = 0; cr < V; cr++)
available.push_back(false);
for (int u = 1; u < V; u++)
{
list<int>::iterator i;
for (i = adj[u].begin(); i != adj[u].end(); ++i)
if (result[*i] != -1)
available[result[*i]] = true;
int cr;
for (cr = 0; cr < V; cr++)
if (available[cr] == false)
break;
result[u] = cr;
for (i = adj[u].begin(); i != adj[u].end(); ++i)
if (result[*i] != -1)
available[result[*i]] = false;
}
for (int u = 0; u < V; u++)
cout << "Vertex " << u << " ---> Color"
<< result[u] << endl;
}

int main()
{
Graph g(6);
g.addEdge(0, 1);
g.addEdge(0, 4);
g.addEdge(0, 5);
g.addEdge(1, 3);
g.addEdge(1, 4);
g.addEdge(2, 3);
g.addEdge(2, 4);
g.addEdge(4, 5);
cout << "Coloring of the graph n";
g.greedyColoring();
return 0;
}

输出:

Coloring of the graph 
Vertex 0 ---> Color0
Vertex 1 ---> Color1
Vertex 2 ---> Color0
Vertex 3 ---> Color2
Vertex 4 ---> Color2
Vertex 5 ---> Color1