E0020 标识符"pop"未定义
E0020 identifier "pop" is undefined
我真的不知道我需要做什么来解决这个问题。我正在使用视觉。预编译标头关闭,sdl 检查关闭。任务是"查找与顶点保持后距离的图形顶点">
主文件:
#include "Header.h"
int main()
{
int start, length, number;
char file1[] = "data.txt";
char file2[] = "result.txt";
queue **graph = NULL;
input(&number, &start, &length, &graph, file1);
queue *buffer = new queue({ NULL, NULL });
search(&number, &start, &length, &graph, &buffer);
output(&buffer, file2, start, length);
system("PAUSE");
}
标题.h:
#include <stdio.h>
#include <windows.h>
#include "vertex.h"
//ввод
void input(int *number, int *start, int *lenght, queue ***graph, char file[])
{
int v1, v2;
char c;
FILE* in = fopen(file, "r");
if (in)
{
fscanf(in, "%d %d %dn", number, start, lenght); //считывается количество вершин, начальная вершина, длина пути и определяется ориентированный ли граф
*graph = new queue*[*number]; //область, куда будет записываться список смежности
for (int i = 0; i < *number; i++)
(*graph)[i] = new queue({ NULL, NULL });
for (int i = 0; i < *number; i++) //ввод списка смежности
{
fscanf(in, "%d", &v2); //считывание строки
fscanf(in, "%c", &c); //проверка есть ли элементы
while (c != 'n')
{
if (fscanf(in, "%d", &v1)) //считывание граничащих вершин
{
push((*graph)[v2], v1);
push((*graph)[v1], v2);
}
fscanf(in, "%c", &c); //проверка есть ли еще элементы
}
}
fclose(in);
}
}
//вывод
void output(queue **buffer, char text[], int start, int length)
{
FILE *out = fopen(text, "w");
if (!(*buffer)->begin)
{
fprintf(out, "От вершины %d нет вершин на пути длинной %d", start, length);
return;
}
while ((*buffer)->begin) //выводятся все элементы очереди
{
int a;
pop(*buffer, a);
fprintf(out, "%d ", a);
}
fclose(out);
}
void step(int* numE, int* numO, bool** odd, queue ***graph, queue** qu)
{
while (*numE > 0) //Элементы будут добавляться пока не пройдут все
{ //элементы добавленные на прошлом шагу
int n;
pop(*qu, n); //Элемент из очереди
vertex* d = (*graph)[n]->begin; //Обход граничащих с n элементов
while (d != NULL) //Пока не пройдут все граничущие элементы
{
if (!(*odd)[d->value])
{
push(*qu, d->value); //В очередь граничащего элемен-та
(*odd)[d->value] = true; //ставим флажок добавленный элемент
(*numO)++;
}
d = d->next; //Переход к следующему граничащему элементу
}
(*numE)--;
}
}
//поиск вершин у связного графа
void search(int *number, int *start, int *length, queue ***graph, queue **comp)
{
bool* even = new bool[*number]; //Массив для хранения вершин на четном ходу
bool* odd = new bool[*number]; //Массив для хранения вершин на нечетном ходу
bool flag = false; //Флажок на проверку изолированную вершину
int numO = 1, numE = 0; //Количество добавленных элементов во время прошлого хода
queue* qu = new queue({ NULL, NULL });// записываются новые элементы
for (int i = 0; i < *number; i++) //Обнуление массивов
{
odd[i] = 0;
even[i] = 0;
}
push(qu, *start); //Добавление стартового элемента
odd[*start] = true;
for (int j = 0; j < *length; j++)
{
if (j % 2)
{
if (!numE) break;
step(&numE, &numO, &odd, graph, &qu);
}
else
{
if (!numO)
break;
step(&numO, &numE, &even, graph, &qu);
if (!flag && numE) //если было добавление, то убираем флажок
flag = true;
}
}
if (*length % 2)
{
for (int i = 0; i < *number; i++)
if (even[i])
push(*comp, i);
}
else
if (flag || *length == 0)
for (int i = 0; i < *number; i++)
if (odd[i])
push(*comp, i);
}
顶点:
struct vertex
{
int value; vertex *next;
};
struct queue
{
vertex *begin; vertex *end;
};
void input(int *number, int *start, int *lenght, queue ***graph, char file[]);
void output(queue **buffer, char text[], int start, int length);
void step(int* numE, int* numO, bool** odd, queue ***graph, queue** qu);
void search(int *number, int *start, int *length, queue ***graph, queue **comp);
E0020 标识符"pop"未定义E0020 标识符"推送"未定义C3861"推送":找不到标识符C3861 "pop":找不到标识符
好吧,我只是忘了实现弹出和推送功能。顶点:
struct vertex
{
int value; vertex *next;
};
struct queue
{
vertex *begin; vertex *end;
};
void push(queue* &p, int elem)
{
vertex *temp = new vertex({ elem, NULL });
if (!p->begin)
{
p->begin = temp;
p->end = temp;
}
else
{
p->end->next = temp;
p->end = p->end->next;
}
}
void pop(queue* &p, int &elem)
{
if (!p->begin) return;
vertex *temp = p->begin;
elem = p->begin->value;
p->begin = p->begin->next;
if (!p->begin)
p->end = NULL;
delete temp;
}
void input(int *number, int *start, int *lenght, queue ***graph, char file[]);
void output(queue **buffer, char text[], int start, int length);
void step(int* numE, int* numO, bool** odd, queue ***graph, queue** qu);
void search(int *number, int *start, int *length, queue ***graph, queue **comp);
相关文章:
- 编译C++时未定义的引用
- vscode g++链路故障:体系结构x86_64的未定义符号
- 如何修复此错误:未定义对"距离(浮点数,浮点数,浮点数,浮点数,浮点数)"的引用
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 不知道某个东西是否被忽略会引入未定义的行为吗
- 对C宏的未定义引用,但在定义它时会出现重新定义错误
- 未定义的引用在哪里
- 编译时的 CImg 库返回对"__imp_SetDIBitsToDevice"的未定义引用
- 对Py_Initialize()的未定义引用
- c++11评估顺序(未定义的行为)
- 使用mysql c++连接器的未定义引用
- 从python调用openMP共享库时,未定义opnMP函数
- 在 Mac 上使用 CMAKE 将 FFTW 和 FFTWPP 链接到项目中时未定义的符号
- Cmake 链接问题:未定义对 Button::mousePressEvent(QGraphicsSceneMouseE
- 未定义的引用 .. 使用 OpenCV 编译 C++ 代码时,从命令行
- 具有外部"c"和程序集的未定义函数
- 此增量后语句是否会导致未定义的行为?
- 尝试调用 .h 文件中定义的变量时出现变量未定义错误
- 在C++中使用内联方法时出现未定义的符号错误
- E0020 标识符"pop"未定义