Вопрос задан из-за незнания синтаксиса языка, времени на разбор нет, нагуглить нужное не получилось.
В общем, есть два файла, назовем их one.cpp и two.h.
Начнем с two.h
#pragma once
#include <stdio.h>
struct tree
{
char elem = 0;
tree *left = NULL, *right = NULL;
};
struct list
{
tree *elem = 0;
list *next = NULL;
};
struct queue
{
queue *s;
tree *t;
queue(queue *s, tree *t)
{
this->s = s;
this->t = t;
}
list *beg = NULL, *end = NULL;
void push(queue *s, tree *t); // Добавление элемента в очередь
tree *pop(queue *s); // Вывод элемента из очереди
bool empty(queue *q); // Проверка очереди на пустоту
В файле есть структура queue, которая описывает очередь. Также я попытался сделать в этой структуре
конструктор, в котором текущей структуре двум ее переменным s и t присваиваются значения, передаваемые при помощи конструктора в файле one.cpp(Представлен ниже).Также эта структура содержит объявления функций для работы с очередью.
Файл one.cpp
#include "Tree.h"
#include <stdlib.h>
tree *add(tree *t, int a)
{
if (t)
a < t->elem ? t->left = add(t->left, a) : t->right = add(t->right, a);
else
{
t = new tree;
t->elem = a;
}
return t;
}
int print(tree *t)
{
if (t)
{
queue *q = new queue(q, t);
//q->push();
while (!empty(q))
{
if (t = pop(q))
{
printf_s("%d ", t->elem);
if (t->left)
push(q, t->left);
if (t->right)
push(q, t->right);
}
}
}
else
return 0;
}
void push(queue *q, tree *t)
{
list *r = new list;
r->elem = t;
if (q->beg)
{
q->end->next = r;
q->end = r;
}
else
q->beg = q->end = r;
}
tree *pop(queue *q)
{
list *r = q->beg;
tree *t = q->beg->elem;
if (!q->beg)
return 0;
q->beg = q->beg->next;
delete r;
return t;
}
bool empty(queue *q) { return q->beg == NULL; }
Проблема заключается в функции print. В данной функции я создаю очередь queue *q = new queue(q,t). Все это создавалось для того, чтобы представленные в файле one.cpp empty(), pop() и push() могли использоваться в файле one.cpp без передачи в них параметром очереди q и переменной t. Для этого я попытался при создании очереди передавать в нее при помощи конструктора переменные q и t, тем самым я бы мог использовать, например, функцию empty как q->empty(), а не empty(q) (т.е структура как-бы уже знает значения q и s и передает их в нужные функции ), но проблема в том, что представленные функции empty(), pop() и push() в любом случае ожидают параметр и в случае, если я не передаю параметр в эти функции, возникает ошибка отсутствия параметра в функции. Сама реализация функций pop, push, empty желательно должна быть в файле one.cpp. Какой правильный синтаксис нужен для решения задачи?