获取“未定义的vtable”;参数化构造函数的错误
我有这个错误:
未定义的引用
vtable
我无法找出其根本原因。
我确实尝试在Google中进行搜索,但仍然无法弄清楚原因。
这是代码:
istate.hpp - >完整的状态接口类
class IState {
public:
IState() = delete;
IState(ICallbacks &callbacks)
: m_callbacks(callbacks) {
}
virtual ~IState() = default;
IState(IState &state)
:m_callbacks(state.m_callbacks) {
};
IState& operator=(IState &state) {
this->m_callbacks = state.m_callbacks;
return *this;
};
IState(IState &&state) = delete;
IState& operator=(IState &&state) = delete;
bool operator== (const IState &state) {
return (this->state_id == state.state_id);
}
virtual const IError& stateEntry(ISubject &Subject) = 0;
virtual const IError& stateExit(ISubject &Subject) = 0;
private:
std::string state_id = std::string("");
ICallbacks& m_callbacks;
};
cstate.hpp - >接口类的部分实现
class CState : public IState {
public:
CState() = delete;
CState(ICallbacks &callbacks)
: IState(callbacks),
m_ccallbacks(static_cast<CCallbacks&>(callbacks)) {
}
virtual ~CState() {
};
CState(CState &state)
:IState(state),
m_ccallbacks(static_cast<CCallbacks&>(state.m_ccallbacks)) {
}
CState& operator=(CState &state) {
this->m_ccallbacks = static_cast<CCallbacks&>(state.m_ccallbacks);
return *this;
}
CState(CState &&state) = delete;
CState& operator=(CState &&state) = delete;
const IError& stateEntry(ISubject &Subject) override {
CSubject &cSubject = static_cast<CSubject&>(Subject);
return StateEntry(cSubject);
};
const IError& stateExit(ISubject &Subject) override {
CSubject &cSubject = static_cast<CSubject&>(Subject);
return StateExit(cSubject);
}
virtual const IError& StateEntry(CSubject &Subject) = 0;
virtual const IError& StateExit(CSubject &Subject) = 0;
private:
CCallbacks& m_ccallbacks;
};
activestate.hpp - &gt;现在完成cstate.hpp
class ActiveState : public CState {
public:
ActiveState() = delete;
ActiveState(ICallbacks &callbacks)
: CState(callbacks) {
}
ActiveState(ActiveState &state)
: CState(state) {
}
ActiveState& operator=(ActiveState &state) = default;
virtual ~ActiveState() {
}
const IError& StateEntry(CSubject &Subject) override {
return NO_ERROR;
};
const IError& StateExit(CSubject &Subject) override {
return NO_ERROR;
};
};
现在,每当我使用基类指针创建activeState
对象时,它会通过编译,但与此错误链接时失败:
In function `ActiveState::ActiveState(ICallbacks&)':
File.cpp:(.text.11ActiveStateC2ERNS2_15ICallbacksE[_ZN611ActiveStateC5ERNS2_15ICallbacksE]+0x26): undefined reference to `vtable for ActiveState'
请让我让我知道我出错了哪里,以及如何解决这个问题。
I have this error coming up:
undefined reference to
vtable
I'm unable to figure out the root cause of it.
I did try to search in Google, but still unable to figure out the reason.
Here is the code:
IState.hpp -> Complete state interface class
class IState {
public:
IState() = delete;
IState(ICallbacks &callbacks)
: m_callbacks(callbacks) {
}
virtual ~IState() = default;
IState(IState &state)
:m_callbacks(state.m_callbacks) {
};
IState& operator=(IState &state) {
this->m_callbacks = state.m_callbacks;
return *this;
};
IState(IState &&state) = delete;
IState& operator=(IState &&state) = delete;
bool operator== (const IState &state) {
return (this->state_id == state.state_id);
}
virtual const IError& stateEntry(ISubject &Subject) = 0;
virtual const IError& stateExit(ISubject &Subject) = 0;
private:
std::string state_id = std::string("");
ICallbacks& m_callbacks;
};
CState.hpp -> Partial implementation of interface class
class CState : public IState {
public:
CState() = delete;
CState(ICallbacks &callbacks)
: IState(callbacks),
m_ccallbacks(static_cast<CCallbacks&>(callbacks)) {
}
virtual ~CState() {
};
CState(CState &state)
:IState(state),
m_ccallbacks(static_cast<CCallbacks&>(state.m_ccallbacks)) {
}
CState& operator=(CState &state) {
this->m_ccallbacks = static_cast<CCallbacks&>(state.m_ccallbacks);
return *this;
}
CState(CState &&state) = delete;
CState& operator=(CState &&state) = delete;
const IError& stateEntry(ISubject &Subject) override {
CSubject &cSubject = static_cast<CSubject&>(Subject);
return StateEntry(cSubject);
};
const IError& stateExit(ISubject &Subject) override {
CSubject &cSubject = static_cast<CSubject&>(Subject);
return StateExit(cSubject);
}
virtual const IError& StateEntry(CSubject &Subject) = 0;
virtual const IError& StateExit(CSubject &Subject) = 0;
private:
CCallbacks& m_ccallbacks;
};
ActiveState.hpp -> Complete implementation of CState.hpp
class ActiveState : public CState {
public:
ActiveState() = delete;
ActiveState(ICallbacks &callbacks)
: CState(callbacks) {
}
ActiveState(ActiveState &state)
: CState(state) {
}
ActiveState& operator=(ActiveState &state) = default;
virtual ~ActiveState() {
}
const IError& StateEntry(CSubject &Subject) override {
return NO_ERROR;
};
const IError& StateExit(CSubject &Subject) override {
return NO_ERROR;
};
};
Now, whenever I create an ActiveState
object using a base class pointer, it goes through compilation, but fails in linking with this error:
In function `ActiveState::ActiveState(ICallbacks&)':
File.cpp:(.text.11ActiveStateC2ERNS2_15ICallbacksE[_ZN611ActiveStateC5ERNS2_15ICallbacksE]+0x26): undefined reference to `vtable for ActiveState'
Please let me know where I am going wrong, and how to solve this problem.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
对不起,
这是cmakelists.txt的问题。
cmakelists.txt在Glob中缺少ActiveState.CPP。
因此,此错误。
感谢您的帮助。
Sorry guys,
It was a problem with CMakeLists.txt.
The CMakeLists.txt was missing ActiveState.cpp in GLOB.
Hence this error.
Thanks for your help.