gpt4 book ai didi

c++ - 循环依赖,即使类是前向声明的

转载 作者:行者123 更新时间:2023-11-30 01:12:28 30 4
gpt4 key购买 nike

有一个非常奇怪的问题,即使向前声明受影响的类也无法解决循环依赖。

如您所见,这两个类都是前向声明的。那么有什么解释吗?没有定义任何一个类的符号。很明显是循环依赖错误。

提前感谢您的建议。

LogBackend.h

#ifndef LOGGER_BACKEND_H
#define LOGGER_BACKEND_H

#include "Logger.h"
#include <string>

namespace se {
class Logger;
class LogBackend {
public:

LogBackend() { }
explicit LogBackend(const std::string& name);
virtual ~LogBackend() { }

virtual void log(const Logger::Level l, const std::string& text) = 0;

/*
Method interface
*/

bool valid();
std::string getName();

protected:
bool m_valid = true;
std::string m_name;
};
}
#endif

注意:有LogBackend的派生类

Logger.h

#ifndef LOGGER_H
#define LOGGER_H

#include "LogBackend.h"
#include <string>
#include <sstream>
#include <vector>
#include <glew/glew.h>

namespace se {
class LogBackend;
class Logger {
public:

enum class Level { WARNING, INFO, EXCEPTION, SEVERE };
static std::string to_string(Level l);

static void add(const LogBackend& backend);

/*
Methods
*/

private:
static std::vector<LogBackend> m_backends;
};
}
#endif

最佳答案

由于您正在使用,在 Logger.h 中有一个 std::vector<LogBackend>前向声明是不够的,除非您将其更改为 std::vector<LogBackend *>std::vector<std::shared_ptr<LogBackend>>

LogBackend 有类似的问题,您正在使用 Logger::Level,因为您只是转发声明的 Logger,所以它不可用。

我建议您通过使用指向 LogBackend 的指针来打破 Logger.h 中的依赖性

关于c++ - 循环依赖,即使类是前向声明的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34205846/

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