ここで少し失われます。 CLuaTick :: Initialize()関数で使用するクラス "CLuaTick"に "CLuaHook"タイプのメンバーがあります。リンカのために、私はcppファイルでメンバーを宣言しなければなりませんが、imは完全になぜそうはわかりません。 cpp内のメンバー宣言をnullptrに設定すると、ランタイム・クラッシュ(アクセス違反)が発生します(アクセス違反はまだどこでも使用されていません)。C2512エラー - クラスを初期化していない場合でも
CLuaHookの唯一のコンストラクタはCLuaHook(const char * Hook);
です。
EDIT:CLuaHook()は、それが内部リストに登録され、その後削除されなければならないだろうと有効な引数で呼び出されるを持っています。
HERESにコード:
luatick.h
#pragma once
#include "LuaSrc\lua.h"
#include "LuaHook.h"
class CLuaTick
{
private:
static CLuaHook m_Hook;
public:
static void Initialize(lua_State *State);
};
luatick.cpp
#include "LuaTick.h"
CLuaHook CLuaTick::m_Hook;
void CLuaTick::Initialize(lua_State * State)
{
m_Hook = CLuaHook("Tick");
}
エラーイム受信:
Error C2512 'CLuaHook': no appropriate default constructor luatick.cpp
'CLuaHook'は持っていませんあなたはデフォルトのコンストラクタを提供するために、いずれかの必要がある
'CLuaHook CLuaTick :: m_Hook;'は動作しません。 'CLuaHook CLuaTick :: m_Hook = CLuaHook(nullptr);'のように引数を渡す必要があります。 – songyuanyao
リンカを落ち着かせるために実際にその行を追加しました。私はそのメンバーを一度使って、Initializeが呼ばれているときにそれを割り当てたいのですが、どのように達成できますか? – Flowx
['std :: optional'](http://en.cppreference.com/w/cpp/utility/optional)または[' std :: unique_ptr'](http://en.cppreference。 com/w/cpp/memory/unique_ptr)、つまり 'std :: optional'または 'std :: unique_ptr 'をラップします。 –
songyuanyao