IClass (My interface):
#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 (in exe, dll linked implicitly)
#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"));
}
At the moment Class is not declared
-> if I include Class.h to main following error occurs: LNK2019: unresolved external symbol: add class __declspec(dllexport) Class : public IClass resolve this linker issue, but is it ok to do it this way?
-> I also can't do this: std::shared_ptr<IClass> test = std::make_shared<IClass>();
(because it's not allowed to create an object of abstract class)
How can I solve this issue and is this best practise?
 
     
    