C++ 在构造函数错误中将类指针作为参数传递

C++ 在构造函数错误中将类指针作为参数传递,c++,C++,my_world.hpp Class my_world :: public I_my_world { public: my_world(hello_world* dev); virtual ~my_world() {}; virtual int trees(); private: hello_world* const p_dev; } Class I_my_world { public: virtual int t

my_world.hpp

Class my_world :: public I_my_world
{  
 public:    
   my_world(hello_world* dev);  
   virtual ~my_world() {};  
   virtual int trees();  
private:  
   hello_world* const p_dev;    
}
Class I_my_world  
{  
public:  
   virtual int trees() = 0;  
protected:  
   virtual ~I_my_world() {};  
}
Class I_hello_world  
{  
public:  
   virtual void plant() = 0;  
protected:  
   virtual ~I_hello_world() {};  
}
Class hello_world : public I_hello_world  
{ 
public:   
   hello_world() = default;  
   virtual ~hello_world() = default;  
   virtual void plant() {};  
}
我的世界.hpp

Class my_world :: public I_my_world
{  
 public:    
   my_world(hello_world* dev);  
   virtual ~my_world() {};  
   virtual int trees();  
private:  
   hello_world* const p_dev;    
}
Class I_my_world  
{  
public:  
   virtual int trees() = 0;  
protected:  
   virtual ~I_my_world() {};  
}
Class I_hello_world  
{  
public:  
   virtual void plant() = 0;  
protected:  
   virtual ~I_hello_world() {};  
}
Class hello_world : public I_hello_world  
{ 
public:   
   hello_world() = default;  
   virtual ~hello_world() = default;  
   virtual void plant() {};  
}
I_hello_world.hpp

Class my_world :: public I_my_world
{  
 public:    
   my_world(hello_world* dev);  
   virtual ~my_world() {};  
   virtual int trees();  
private:  
   hello_world* const p_dev;    
}
Class I_my_world  
{  
public:  
   virtual int trees() = 0;  
protected:  
   virtual ~I_my_world() {};  
}
Class I_hello_world  
{  
public:  
   virtual void plant() = 0;  
protected:  
   virtual ~I_hello_world() {};  
}
Class hello_world : public I_hello_world  
{ 
public:   
   hello_world() = default;  
   virtual ~hello_world() = default;  
   virtual void plant() {};  
}
你好,世界水电站

Class my_world :: public I_my_world
{  
 public:    
   my_world(hello_world* dev);  
   virtual ~my_world() {};  
   virtual int trees();  
private:  
   hello_world* const p_dev;    
}
Class I_my_world  
{  
public:  
   virtual int trees() = 0;  
protected:  
   virtual ~I_my_world() {};  
}
Class I_hello_world  
{  
public:  
   virtual void plant() = 0;  
protected:  
   virtual ~I_hello_world() {};  
}
Class hello_world : public I_hello_world  
{ 
public:   
   hello_world() = default;  
   virtual ~hello_world() = default;  
   virtual void plant() {};  
}
my_world.cpp

int my_world::trees()  
{  
   p_dev->plant();  
   return 0;  
}

my_world::my_world(hello_world* dev)  
: p_dev(nullptr)  
{  
    
}  
new_world.cpp->内干管

hello_world * alpha = new hello_world();
my_world * beta = new my_world(alpha);
int b = beta ->trees();

我做错什么了吗?我的处理器给出了shell线程错误。我只是有这么多的代码,所以它的错误不依赖于任何其他代码


我想知道我是否在代码方面做了任何错误,如果是与处理器相关的事情,我可以检查其他事情。

这段代码看起来确实很奇怪

my_world::my_world(hello_world* dev) : p_dev(nullptr) 
那应该是

my_world::my_world(hello_world* dev) : p_dev(dev)
因为
p\u dev
为空,所以这里会发生崩溃

int my_world::trees()
{
   p_dev->plant();
   return 0;
}

这段代码看起来确实很奇怪

my_world::my_world(hello_world* dev) : p_dev(nullptr) 
那应该是

my_world::my_world(hello_world* dev) : p_dev(dev)
因为
p\u dev
为空,所以这里会发生崩溃

int my_world::trees()
{
   p_dev->plant();
   return 0;
}

“我只是有这么多的代码,所以它的错误不依赖于任何其他代码。”我猜你做了#包括对吗?是的,包括都可以。我只是没有写在这里的描述,我没有面临任何问题,而做一个建设,所有的问题是在运行代码请阅读,然后你的问题,以正确格式化代码。并确保您的应用程序不包含任何与您想询问的问题无关的问题(例如使用大写字母
C
Class
)。如果您遇到生成错误,副本也会将完整的错误输出粘贴到问题中,并在报告错误的行的代码中添加注释。请检查问题中代码的格式,上面的内容几乎无法阅读。另外,请确保您实际提供了一个完整的错误以及它产生的逐字记录错误。作为这里的新用户,也请阅读“我只是有这么多的代码,所以它的错误不依赖于任何其他代码。”我想你做了#包括,对吗?是的,包括都可以。我只是没有写在这里的描述,我没有面临任何问题,而做一个建设,所有的问题是在运行代码请阅读,然后你的问题,以正确格式化代码。并确保您的应用程序不包含任何与您想询问的问题无关的问题(例如使用大写字母
C
Class
)。如果您遇到生成错误,副本也会将完整的错误输出粘贴到问题中,并在报告错误的行的代码中添加注释。请检查问题中代码的格式,上面的内容几乎无法阅读。另外,请确保您实际提供了一个完整的错误以及它产生的逐字记录错误。作为这里的一个新用户,也请阅读。是的,这解决了问题。但这背后的原因是什么?为什么我不能保持空值?是因为p_dev是常数吗?因为如果它不是常数,我甚至不需要在构造中放置pDEV,这是基本的C++。如果写入
ptr->something
,则
ptr
不能为空。与常量无关。如果取消引用指针,那么指针必须指向某个对象。是的,这解决了问题。但这背后的原因是什么?为什么我不能保持空值?是因为p_dev是常数吗?因为如果它不是常数,我甚至不需要在构造中放置pDEV,这是基本的C++。如果写入
ptr->something
,则
ptr
不能为空。与常量无关。如果取消引用指针,则该指针必须指向某个对象。