IClass (私のインターフェース):
#ifndef _ICLASS_H
#define _ICLASS_H
#include <sstream>
namespace Test
{
class __declspec(dllexport) IClass
{
public:
virtual ~IClass() {}
virtual bool Init(const std::string &path) = 0;
};
}
#endif
Class.h
#ifndef _CLASS_H
#define _CLASS_H
#include "IClass.h"
#include <memory>
#include <sstream>
#include <stdio.h>
namespace Test
{
class Class: public IClass
{
public:
Class();
~Class();
bool Init(const std::string &path);
};
}
#endif
Class.cpp
#include "Class.h"
namespace Test
{
Class::Class()
{
}
bool Class::Init(const std::string &path)
{
try
{
// do stuff
return true;
}
catch(std::exception &exp)
{
return false;
}
}
}
main (exe では、暗黙的にリンクされた dll)
#include "IClass.h"
using namespace Test;
int main(int argc, char* argv[])
{
std::shared_ptr<IClass> test = std::make_shared<Class>(); // error: unreferenced Class
test->Init(std::string("C:\\Temp"));
}
現時点ではクラスは宣言されていません
-> メインにインクルードClass.h
すると、次のエラーが発生します: LNK2019: unresolved external symbol
: add class __declspec(dllexport) Class : public IClass
resolve this linker issue, but is it ok it do it this way?
->これもできません:(std::shared_ptr<IClass> test = std::make_shared<IClass>();
抽象クラスのオブジェクトを作成することは許可されていないため)
この問題を解決するにはどうすればよいですか? また、これがベスト プラクティスですか?