[解決済み] コンストラクタの `vtable' への参照が未定義である [重複] 。
2022-03-12 03:17:28
質問
C++のコンストラクタを勉強しようと思っているのですが、まだ初心者です。次のクラスは私が書きました。
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'.
そして、すべてのコンストラクタについてです。
それが私の間違いだということがわからないのです...。どなたか教えてください。
どのように解決するのですか?
ascheplerさんのおっしゃることは全くその通りです。冒頭の件ですが、仮想関数はどのような場合に使用するのか、いくつかアドバイスが欲しいところです。仮想関数は、cppのポリモーフィズムをサポートするためのメソッドとして使用され、シナリオを使用して2つに分割することができます。
-
インターフェース/抽象クラス
このシナリオでは、仮想関数が pure virtual として宣言され、そのクラスが abstract class と呼ばれるようになります。 非インスタンス . こうすることで、最近のプログラミングでサポートされているような「インターフェイス」を実装することができるのです。
class Interface { //.... virtual void f() = 0; }; class Concrete { // override this f() void f() override {} };
-
ポリモーフィズム/具象クラス
このシナリオでは、仮想関数は派生クラスでオーバーライドできることを除いて、通常の関数として宣言されています。 そして、あなたはそれを実装する必要があります .
class Parent { //... virtual void g(); } class Derived { //... void g() override{} }
なお、仮想関数として宣言されていないparentと同じ名前の関数を宣言することは可能です。これは、次のように呼ばれます。 隠す これは別の話です。
関連
-
[解決済み】識別子 "string "は未定義?
-
[解決済み】C++エラー:の初期化に一致するコンストラクタがありません。
-
[解決済み】クラステンプレートの使用にはテンプレート引数リストが必要です
-
[解決済み] 解決済み] `pthread_create' への未定義の参照 [重複] [重複
-
[解決済み] C++で、あるコンストラクタを別のコンストラクタから呼び出す(コンストラクタ・チェイニングを行う)ことは可能ですか?
-
[解決済み] explicit キーワードの意味は?
-
[解決済み] 文字列の単語を反復処理するにはどうすればよいですか?
-
[解決済み] なぜ、オブジェクトそのものではなく、ポインタを使用しなければならないのですか?
-
[解決済み】C/C++の"-->"演算子とは何ですか?
-
[解決済み】vtableへの未定義の参照
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】LLVMで暗黙のうちに削除されたコピーコンストラクタの呼び出し
-
[解決済み】C++のGetlineの問題(オーバーロードされた関数 "getline "のインスタンスがない
-
[解決済み】 != と =! の違いと例(C++の場合)
-
[解決済み】変数 '' を抽象型 '' と宣言できない。
-
[解決済み】テンプレートの引数1が無効です(Code::Blocks Win Vista) - テンプレートは使いません。
-
[解決済み】fpermissiveフラグは何をするのですか?
-
[解決済み】エラー:strcpyがこのスコープで宣言されていない
-
[解決済み】Visual C++で "Debug Assertion failed "の原因となる行を見つける。
-
[解決済み] 解決済み] `pthread_create' への未定義の参照 [重複] [重複
-
[解決済み】演算子のオーバーロード C++; <<操作のパラメータが多すぎる