gpt4 book ai didi

命名空间的 C++ 继承问题

转载 作者:太空宇宙 更新时间:2023-11-03 10:35:42 26 4
gpt4 key购买 nike

好吧,我一直在寻找,但我的智慧无法找到为什么这不起作用的原因:

基类(misc/interface/handler.h)

#ifndef __t__MISC_VIRTUAL_HANDLER_H
#define __t__MISC_VIRTUAL_HANDLER_H
#pragma message("Starting with 'handler.h'")

namespace t {
namespace misc {
namespace interface {
class Handler {
public:
Handler();
virtual ~Handler();

virtual int setup() = 0;
virtual int teardown() = 0;
virtual int update() = 0;
protected:
private:
};
}
}
}

#pragma message("Ending with 'handler.h'")
#endif // __t__MISC_VIRTUAL_HANDLER_H

派生类(graphics/handler.h):

#ifndef __t_GRAPHICS_HANDLER_H
#define __t_GRAPHICS_HANDLER_H

#include "../misc/interface/handler.h"

namespace t {
namespace graphics {
class Handler: public t::misc::interface::Handler {
public:
Handler();
virtual ~Handler();

int getResolutionX() { return m_resolutionX; }
int getResolutionY() { return m_resolutionY; }
bool getFullscreen() { return m_isFullscreen; }

protected:
private:
unsigned int m_resolutionX, m_resolutionY;
bool m_isFullscreen;

}; // class Handler
} // namespace graphics
} // namespace t
#endif // __t_GRAPHICS_HANDLER_H

...这看起来很微不足道。

派生类实现(graphics/handler.cpp):

#include "handler.h"

t::graphics::Handler::Handler(): t::misc::interface::Handler() {

}

t::graphics::Handler::~Handler() {
}

...这也应该是微不足道的,但会产生错误:

src\graphics\handler.cpp|5|undefined reference to `t::misc::interface::Handler::Handler()'

我正在使用带有代码块的 MinGW 以及 CB 使用的任何标准设置,我已经尝试使用测试类构建相同的情况并且在相同的环境和带有 vanilla g++ 的 Linux 中都按预期工作。

最佳答案

我在你的代码中看不到 t::misc::interface::Handler::Handler() 的任何实现——它将被继承类的构造函数调用,所以它需要一个实现。链接器找不到它,所以它会提示。

只是改变:

Handler();
virtual ~Handler();

在抽象类中:

Handler() {}
virtual ~Handler() {}

然后你就可以开始了。

关于命名空间的 C++ 继承问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4165260/

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