2016-03-21 10 views
0

Я искал Синтаксическую ошибку C2061 некоторое время, и я понял, что это часто вызвано круговыми зависимостями файлов заголовков. Тем не менее, я считаю, что я должен был разрешить это в своих файлах, но у меня все еще есть проблема.C++ Custom Header File - Синтаксическая ошибка 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' ', член типа 'Node', а затем в' Node' есть член типа 'Arc'? – EdChum

+1

([* Почему «использование пространства имен std» в C++ считается плохой практикой?] (Http://stackoverflow.com/questions/1452721/why-is-using-namespace-std-in-c-considered-bad- практика)) – Biffen

+2

@LoadData Не можете ли вы поместить реализацию 'Node :: set_arcs' в файл' .cpp'? – Biffen

ответ

0

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

-4

Вы круговую в вас зависимые пакеты файлов. Дуга зависит от узла и узла зависит от Arx. Это не может работать, потому что вы должны включить Arc в узле, а также Node в Arc. Вперед декларация помогает здесь немного, но вы помещаете использование внутри файла заголовка. Вы не должны этого делать, потому что ваш узел и дуга находятся внутри std. Посмотрите здесь, чтобы получить дополнительные разъяснения. "using namespace" in c++ headers

+2

Как написано, ни одно определение класса никоим образом не зависит от другого. – molbdnilo