标识符"V 未定义
Identifier "V'' is undefined
我在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;
}
- 你的类没有名为
V
的数据成员,因此当你引用 稍后在您的方法中V
,只是没有这样的数据成员 现存。在类中声明类型为int
的数据成员。 - 之后,您需要删除该方法的参数
greedyColoring()
,available
因为你在 同样方法的主体。如果不删除参数, 然后你会有一个名为available
的参数,用于隐藏一个 名为available
的自动变量。但我想你这样做了 您努力修复有关V
的错误。 - 可变长度数组不是标准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
相关文章:
- Visual Studio C++ PlaySound 标识符未定义
- 删除动态数组时未定义标识符
- 未定义的标识符/未声明
- 标识符Class_name未定义C++ oop
- 标识符"hWnd"未定义
- 为什么更改包含 psapi.h 的顺序会产生编译错误?(标识符 BOOL 未定义)
- Visual Studio 2019 概念标识符未定义
- 标识符"DDRB"未定义 - VS code / Visual Studio
- 在头文件中使用opencv类型来实现未定义的标识符
- 标识符"in"未定义
- 智能感知:标识符"node"未定义
- 标识符"__readgsqword"未定义 - Visual Studio 2017
- 标识符"V 未定义
- 标识符"thread"未定义
- 标识符uint8_t未定义 - Visual Studio 2017
- 未定义的标识符 - 缺少哪些头文件?- DX12.
- 调用函数时未定义标识符"function_name"
- Wininet未定义标识符
- 简单代码问题-未定义标识符
- 试图编写函数的未定义标识符