VS编译C++项目报错:无法实例化抽象类等问题求助
C++项目编译错误求助
项目文件
Init.h
#pragma once #include <iostream> #include <memory> #include "Ishare.h" using namespace std; class Init { private: std::unique_ptr<IfShare> p_ifShare; int constData; int varData; public: Init(const IfShare& ifshareInit, int constDataInit) : p_ifShare(std::make_unique<IfShare>(ifshareInit)) { varData = 10; cout << "Init带参构造函数被调用" << endl; cout << "varData:" << varData << " constDataInit:" << constDataInit << endl; } Init(const Init& initInstance) : p_ifShare(std::make_unique<IfShare>(initInstance.p_ifShare)), constData(initInstance.constData){ varData = 100; cout << "Init拷贝构造函数被调用" << endl; cout << "varData:" << varData << " constDataInit:" << initInstance.constData << endl; } }; void InitFunc();
Init.cpp
#include "Init.h" #include "share.h" void InitFunc() { std::unique_ptr<Init> InitImpl = std::make_unique<Init>(InitShareFunc()); }
Ishare.h
#pragma once class IfShare { public: virtual void sharePrint1() = 0; virtual void sharePrint2() = 0; };
share.h
#pragma once #include <iostream> #include "Ishare.h" #include "Init.h" class Share : public IfShare { public: void sharePrint1() { std::cout << "sharePrint1" << std::endl; } void sharePrint2() { std::cout << "sharePrint2" << std::endl; } }; class App { public: App(const Share& IfShareData, int data) { InitShare = std::make_unique<Init>(IfShareData, data); } friend const Init& InitShareFunc(); private: std::unique_ptr<Init> InitShare; };
mainApp.cpp
#include <iostream> #include <memory> #include "share.h" using namespace std; static std::unique_ptr<App> p_App; static std::unique_ptr<Share> p_Share; const Init& InitShareFunc() { return *(p_App->InitShare.get()); } int main() { int x = 20; p_Share = std::make_unique<Share>(); p_App = std::make_unique<App>(*(p_Share.get()), x); InitFunc(); // 实际应用中由外部插件调用,测试时放在此处 return 0; }
设计意图
- 主应用:初始化共享对象并传递给App对象
- App:持有Init对象的唯一所有权,通过友元函数共享该对象
- IShare:纯虚类,用于将Init的调用路由到Share类
- Init:从App的Init对象获取引用,通过IShare调用Share的成员函数
核心思路:App实例独占Init对象,InitFunc()始终基于该对象创建本地Init实例
编译错误信息
Severity Code Description Project File Line Error (active) member "Init::p_ifShare" (declared at line 12 of "c:\Users\nxf92615\Documents\Visual Studio 2015\Projects\Project3\Project3\Init.h") is inaccessible Project3 c:\Users\nxf92615\Documents\Visual Studio 2015\Projects\Project3\Project3\Init.cpp 6 Error C2259 'IfShare': cannot instantiate abstract class Project3 c:\program files (x86)\microsoft visual studio 14.0\vc\include\memory 1636 Error C2664 'IfShare::IfShare(IfShare &&)': cannot convert argument 1 from 'const std::unique_ptr<IfShare,std::default_delete<_Ty>>' to 'const IfShare &' Project3 c:\program files (x86)\microsoft visual studio 14.0\vc\include\memory 1636 Error C2259 'IfShare': cannot instantiate abstract class Project3 c:\program files (x86)\microsoft visual studio 14.0\vc\include\memory 1636 Error C2664 'IfShare::IfShare(IfShare &&)': cannot convert argument 1 from 'const std::unique_ptr<IfShare,std::default_delete<_Ty>>' to 'const IfShare &' Project3 c:\program files (x86)\microsoft visual studio 14.0\vc\include\memory 1636
求助问题
无法理解上述编译错误的原因,请求帮忙分析并解决。
内容的提问来源于stack exchange,提问作者chandu
相关产品推荐
相关产品推荐

