пространства имен — C ++ Пользовательский заголовочный файл — Синтаксическая ошибка C2061: идентификатор

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

Arc.h

#pragma once

#include <string>

using namespace std;

class Node;

class Arc
{
public:
Arc(Node &p_destination, const string &p_mode);
~Arc();

private:
string m_mode;
Node* m_destination;
};

node.h

#pragma once
#include <string>
#include <vector>

using namespace std;

class Arc;

class Node
{
public:
Node(const string &p_name, const int &p_identifier, const float &p_latitude, const float &p_longitude);
~Node();

void set_arcs(Arc* p_arc) { m_arcs.push_back(p_arc); } //Line that causes the error

private:
std::vector<Arc*> m_arcs;
//Other Private Variables removed

};

Заголовочные файлы были включены в соответствующие файлы cpp. Любая помощь по этому вопросу будет принята с благодарностью!

Изменить: полное сообщение об ошибке ниже

"Syntax Error: identifier 'Arc'"

0

Решение

Проблема в том, что имя «Arc» уже используется методом в глобальном пространстве имен. Переименуйте ваш класс в неиспользуемое имя или поместите его в пространство имен, которое не является глобальным пространством имен.

0

Другие решения

У вас есть круговая зависимость в ваших файлах. Дуга зависит от Узла, а Узел зависит от Аркса. Это не может работать, потому что вы должны включить Arc в Node, а также Node in Arc.
Форвардное объявление здесь немного помогает, но вы помещаете использование в заголовочный файл. Вы не должны этого делать, потому что тогда ваш Узел и Дуга находятся внутри стандартного. Смотрите здесь для дальнейшего разъяснения.
"используя пространство имен" в заголовках с ++

-4

По вопросам рекламы [email protected]