gpt4 book ai didi

c++ - 相互依赖的类声明

转载 作者:太空狗 更新时间:2023-10-29 23:46:37 24 4
gpt4 key购买 nike

我想弄清楚这个编译错误是什么意思,希望我能解释清楚。

In file included from sys/charon.cpp:4:0:

接下来我将转到上面的 ^ 文件,并用黄色下划线表示:

#include "../headers/charon.h"

还有类型标识符“charon_”,它是在头文件 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);
}

不幸的是,我需要在“文件 1”开始定义“I”之前声明“B”。但与此同时,我需要为 B 定义 I。所以我不知道如何在另一个之前定义两者.. 我猜我需要一个更高级的解决方案,但我不知道。

//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 天里,这让我很沮丧。

最佳答案

似乎在 File1.h 中,B 的前向声明就足够了,而不是包含它,因为您只使用对 B< 的引用和指针。添加:

class B; // << Forward declaration of B

class I
{
private:
B* my_private_b;

public:
I(B& handle);
}

File1.h的开头

关于c++ - 相互依赖的类声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10162580/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com