【发布时间】:2010-11-12 13:48:06
【问题描述】:
好的,我一直在寻找,但我无法找到为什么这不起作用的原因:
基类(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 中都按预期工作。
【问题讨论】:
-
尝试删除命名空间并查看问题是否可以重现。将文件放入同一目录并执行相同操作:如果未打印 pragma,则该文件未包含,或者已定义包含保护。时期。始终努力生成重现问题的最小代码。
-
同意@Konrad。事实上,您会发现只需为 SO 准备问题,您就会多次解决问题。
标签: c++ inheritance namespaces virtual