Я пытаюсь понять, что означает эта ошибка компиляции, и я надеюсь, что объясню это хорошо.Взаимозависимые декларации классов
In file included from sys/charon.cpp:4:0:
После этого берет меня к^файл выше, и подчеркивает в желтый цвет это:
#include "../headers/charon.h"
Как идентификатор типа «charon_», который является класс, определенный в заголовочном файле Харона. h, также подчеркнуто желтым, возможно, с другой ошибкой.
sys/../headers/charon.h:17:9: error: redefinition of ‘class charon::charon_’
sys/../headers/chio.h:86:9: error: previous definition of ‘class charon::charon_’
sys/charon.cpp:12:20: error: definition of implicitly-declared ‘charon::charon_::charon_()’
Однако я надеюсь, что все они связаны с первой ошибкой, я думаю, что это связано с чем-то я пытаюсь сделать.
//File 1.h
/**********/
class I
{
private:
B* my_private_b;
public:
I(B& handle);
}
К сожалению, мне нужно «B» объявлена до «файла 1» начинается определение «Я» .. но в то же время, мне нужно я быть определен для В. Так что я не знаю, как определить как перед другим. Я предполагаю, что мне нужно более продвинутое решение, но я не знаю.
//File 2.h
/***********/
class B
{
private:
I i;
O o;
public:
B();
}
Так что, если я могу найти ответ на этот вопрос, возможно, я мог бы просто проверить эту следующую часть для себя. Если вы считаете, что было бы неплохо проверить, не пойду ли я в правильном направлении, я вставлю весь код, о котором идет речь ниже.
. #. #. #. #. #. #. # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . #. #. #.
Недолго, недостаточно, не читал? Ну вот все строки, за исключением комментариев, кода из всех четырех файлов. В порядке воспринимаемой важности.
//////////////////////////////////////
/////
/////////////
/////
/////
/////
//File: chio.h
#ifndef CHIO_H
#define CHIO_H
#include <deque>
#include <queue>
#include <iostream>
using namespace std;
namespace charon
{
class charon_
{
};
}
namespace chio
{
class chout_
{
private:
public:
chout_();
~chout_();
};
class chin_
{
private:
charon::charon_* engine;
public:
chin_(charon::charon_& handle);
chin_();
~chin_();
};
}
#endif /* CHIO_H */
//////////////////////////////////////
/////
/////////////
/////
/////
/////
//File: charon.h/*
//
* File: charon.h
* Author: josh
*
* Created on 11 April 2012, 22:26
*/
#ifndef CHARON_H
#define CHARON_H
//#include "boost/thread.hpp"
#include "chio.h"
using namespace std;
using namespace chio;
namespace charon
{
class charon_ {
private:
chout_ engine_output;
chin_ engine_input;
//boost::thread input_thread;
//boost::thread output_thread;
void start_threads();
void stop_threads();
public:
charon_();
charon_(charon_ &orig);
~charon_();
void run();
};
}
#endif /* CHARON_H */
Это конструкторы/cpp-файлы.
charon.cpp
#include <iostream>
//#include <boost/thread.hpp>
//#include <boost/date_time.hpp>
#include "../headers/charon.h"
using namespace std;
using namespace charon;
using namespace chio;
namespace charon
{
charon_::charon_(){
engine_input = chio::chin_((charon_*)this);
}
};
//^^charon.cpp^^
---------
//chin.cpp
#include <iostream>
#include <borland/conio.h>
#include <ncurses.h>
#include <deque>
#include "../headers/charon.h"
using namespace std;
using namespace charon;
using namespace chio;
namespace chio
{
chin_::chin_(charon::charon_& handle) {
engine = handle;
}
chin_::~chin_() {
}
}
И для финала, я лично ненавижу чтение, поэтому я откладываю, просто спрашивая об этом всех. Поэтому, если вы зашли так далеко, вы, вероятно, тоже этого захотите.
"/usr/bin/gmake" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .build-conf
gmake[1]: Entering directory `/home/josh/Projects/Maze/Charon'
"/usr/bin/gmake" -f nbproject/Makefile-Debug.mk dist/Debug/GNU-Linux-x86/charon
gmake[2]: Entering directory `/home/josh/Projects/Maze/Charon'
mkdir -p build/Debug/GNU-Linux-x86/sys
rm -f build/Debug/GNU-Linux-x86/sys/charon.o.d
g++ -c -g -MMD -MP -MF build/Debug/GNU-Linux-x86/sys/charon.o.d -o build/Debug/GNU-Linux-x86/sys/charon.o sys/charon.cpp
In file included from sys/charon.cpp:4:0:
sys/../headers/charon.h:17:9: error: redefinition of ‘class charon::charon_’
sys/../headers/chio.h:86:9: error: previous definition of ‘class charon::charon_’
sys/charon.cpp:12:20: error: definition of implicitly-declared ‘charon::charon_::charon_()’
gmake[2]: *** [build/Debug/GNU-Linux-x86/sys/charon.o] Error 1
gmake[2]: Leaving directory `/home/josh/Projects/Maze/Charon'
gmake[1]: *** [.build-conf] Error 2
gmake[1]: Leaving directory `/home/josh/Projects/Maze/Charon'
gmake: *** [.build-impl] Error 2
Я был бы просто рад получить ответ на мою более простую версию. У меня закончились идеи по исправлению ошибок компиляции, и я просмотрел свою огромную ссылку на C++, проверяя все, что я могу придумать. Весь синтаксис выглядит правильно, я думаю, что я просто не знаю, как манипулировать компилятором, чтобы делать такие вещи.
Я не знаю, я, вероятно, сейчас просто бессвязно. Это меня разочаровывало последние 3 дня.
Удалена отладочная метка. Термин «отладка» обычно используется для идентификации процесса идентификации и исправления ошибки в запущенной программе, в то время как это ошибка компиляции. –
Первая «ошибка» - это не ошибка, а информация о следующей ошибке: она сообщает вы, откуда был включен файл заголовка, в котором произошла ошибка (что может быть важно, потому что некоторая ошибка, найденная там, может быть результатом чего-то перед этим '# include'). – celtschk