Как я могу определить 2 класса из одного и того же заголовочного файла, в то время как один класс зависит от другого? - PullRequest
0 голосов
/ 16 апреля 2019

В настоящее время я пытаюсь реализовать простой алгоритм поиска пути, и для него нужны ребра и узлы. Я хочу обработать реализацию в одном .h и одном .cpp файле. Прямо сейчас я получаю ошибку "ожидаемый конструктор, деструктор или преобразование типов перед ...".

Я уже пытался разделить оба класса на 2 .h и .cpp-файлы, но это тоже не сработало. Я перепробовал множество решений для этого сообщения об ошибке, но, похоже, ничего не работает, и я думаю, что что-то мне не хватает прямо сейчас.

Мой файл utilites.cpp выглядит примерно так

#include "utilities.h"

//Class Node
//Public

using namespace std;

Node::Node(string name)
{
  this->name = name;
}

//Class Edge
//public

Edge::Edge(Node::Node nSource, Node::Node nTarget, int weight)
{
  this->nSource = nSource;
  this->nTarget = nTarget;
  this->weight = weight;
}

и мои утилиты.h:

#ifndef UTILITIES_H
#define UTILITIES_H

#include <string>
#include <list>

class Node
{
public:
  Node(std::string);
  std::string name;
};


class Edge
{
public:
  Edge(Node, Node, int);
  Node nSource;
  Node nTarget;
  int weight;
};

#endif /* end of include guard: UTILITIES_H */

Если я просто использую Class Class, все работает. Но если я захочу реализовать Class Edge с помощью Class Node, я получу ранее упомянутую ошибку. Я думаю, что это легко решить, но я просто не могу понять это.

Я должен сказать, что уже пробовал с

Edge::Edge(Node nSource, Node nTarget, int weight)
{
  this->nSource = nSource;
  this->nTarget = nTarget;
  this->weight = weight;
}

но это только что дало мне ошибку "Нет подходящей функции для вызова Node :: Node ()"

1 Ответ

0 голосов
/ 16 апреля 2019

Проблема заключалась в том, что я пропустил фигурные скобки после того, как по умолчанию конструктор Node

Node(){};

Теперь он работает как задумано.Спасибо за ответы, они заставили меня снова взглянуть на конструктор по умолчанию ...

...