首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法将此->指针传递给子对象

无法将此->指针传递给子对象
EN

Stack Overflow用户
提问于 2012-04-16 02:16:22
回答 4查看 1.1K关注 0票数 1

我知道this已经是一个指针,但我想知道this到底是什么。它是一个地址还是一个*类型的指针?

如果我将其存储到一个变量中,我将如何定义该变量?

让我们以此为例

代码语言:javascript
复制
class Adult
{
private:
 Child child;

public:
 Adult(){
  child = new Child(this);
  //to have something to hold onto and get back to the upper level of the hierarchy.
 }
};


class Child
{
private:
 Adult* my_adult;

public:
 Child();
 Child(Adult &hand){
  my_adult = hand;
 }
}

好的,我遇到麻烦的地方是,当我试图构建这个项目时,它会输出my_adult = hand;的代码行,如果后面还有更多的代码,我会非常震惊。

代码语言:javascript
复制
sys/chin.cpp:19:14: error: cannot convert ‘Adult’ to ‘Adult*’ in assignment

那么,当作为数据类型而不是访问成员来处理时,这是如何工作的呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-04-16 02:18:42

my_adult是一个指针,而hand不是,简单明了。

您需要:

代码语言:javascript
复制
class Child
{
private:
 Adult my_adult; //no pointer

public:
 Child();
 Child(Adult &hand){
  my_adult = hand;
 }
};

代码语言:javascript
复制
class Child
{
private:
 Adult* my_adult;

public:
 Child();
 Child(Adult* hand){ //pointer parameter
  my_adult = hand;
 }
};

你的第一个例子也是非法的:

代码语言:javascript
复制
child = new Child(this);

不应该编译,因为孩子是一个对象,而不是一个指针。

代码语言:javascript
复制
child = Child(this);

才是正确的版本。

票数 3
EN

Stack Overflow用户

发布于 2012-04-16 02:19:35

地址和*类型指针是一回事。更改子构造函数以获取Adult*,并使用初始化语法而不是=对其进行初始化

代码语言:javascript
复制
Child(Adult* hand): my_adult(hand) { } 

一旦你有了这个指针,你的子类中的代码就可以根据需要调用my_adult->Whatever()。您需要知道,只有在Adult对象总是比Child对象存活时间长的情况下,这种方法才是安全的。例如,如果一个订单被删除,所有的订单项也会被删除,所以你不需要担心一个订单项使用了一个指向它的订单的无效指针。如果你的系统中不是这样,那么你有一个比指针语法更大的问题要担心。

票数 1
EN

Stack Overflow用户

发布于 2012-04-16 02:19:50

这里的问题是my_adult是一个指针,而hand是一个引用。例如,my_adult=&hand可以工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10164707

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档