【发布时间】:2017-04-14 01:38:04
【问题描述】:
我尝试学习 C++ 构造函数,Imma noobie 还没有。我写了下一节课:
screen.h
#ifndef SCREEN_H
#define SCREEN_H
#include "pch.h"
class Screen
{
public:
Screen(const std::string& name);
Screen(const Screen& screen);
Screen(Screen&& screen);
const std::string& name() const;
virtual void draw();
private:
std::string m_name;
};
#endif // SCREEN_H
screen.cpp
#include "screen.h"
Screen::Screen(const std::string& name)
: m_name{name}
{
m_name = name;
}
Screen::Screen(const Screen& screen)
: m_name{screen.m_name}
{
}
Screen::Screen(Screen&& screen)
: m_name{std::move(screen.m_name)}
{
}
const std::string& Screen::name() const
{
return this->m_name;
}
但我在编译时遇到问题:
screen.cpp:4: error: undefined reference to `vtable for Screen'
对于所有构造函数也是如此。
我不明白这是我的错误...请问,谁能解释一下?
【问题讨论】:
-
如果你有一个非抽象的虚函数,那么你必须实现它。
-
顺便说一下,如果你有虚函数并且意味着类是多态和继承的,你应该真正实现一个(虚拟)析构函数。
-
一般来说,一个带有任何虚函数的类也应该有一个虚析构函数。
-
在第一个构造函数中,
m_name = name;是多余的,因为m_name{name}成员初始值设定项。 -
@aschepler,是的,你是对的!当我尝试修复错误时忘记删除它。谢谢!