指针问题

Pointer trouble

本文关键字:问题 指针      更新时间:2023-10-16

我无法使指针正常工作。 在我的主文件中,我声明

Analysis2 analysis = Analysis2();
MaxResults maxresults = MaxResults( analysis);

现在在我的 MaxResults 类中,我想指向分析,以便如果它的任何变量发生变化,我仍然可以获得正确的值。 现在我将 MaxResults 标头中的构造函数声明为

MaxResults(Analysis2 analysis);
Analysis2 * analysis2;

在最大结果类中

MaxResults(Analysis2 analysis)
{
    analysis2 = analysis;
}

当我尝试从更改的分析中访问内容时,analysis2 似乎跟不上。 我该如何解决这个问题,将来有没有一种简单的方法来记住指针以及引用和取消引用?

如果你想让MaxResults保留一个指向Analysis2对象的指针,你应该这样做:

class MaxResults {
 public:
     MaxResults(Analysis* an) : analysis(an) {}
 private:
     Analysis* analysis;
};

并像这样构造它:

Analysis2 analysis = Analysis2();
MaxResults maxresults = MaxResults( &analysis);

请注意使用 address-of 运算符 (&( 捕获 analysis 的地址并将其作为指针传递给 MaxResults 构造函数,该构造函数将指针保存在成员中(使用初始化列表,这或多或少等同于在构造函数的主体中执行analysis = an,以防万一:语法对您来说是新的(。

如需进一步阅读,请查看参考文献(当然,一旦您对指针有了更好的理解(。在这种情况下,参考文献可能更可取。

我不太确定这是如何编译的; 它不应该。问题是你的构造函数。

首先,如果构造函数只采用一个Analysis2参数,则该参数是按值传递的;始终复制该对象。指针无法指向传入的实际对象,因为构造函数只能获取它的副本。您需要使用引用参数:

MaxResults(Analysis2& analysis);

其次,不能直接将对象分配给指向该对象的指针。您需要使用 & 运算符来获取对象的地址。

MaxResults(Analysis2& analysis)
{
    analysis2 = &analysis;
}

在不相关的说明上:对构造函数使用成员初始值设定项列表是一种很好的风格。

MaxResults(Analysis2& analysis)
    : analysis2(&analysis)
{
}

当你调用MaxResults maxresults = MaxResults(analysis);时,你的构造函数会得到analysis的副本。您需要传入对analysis的引用,以便构造函数获取它可以存储在指针中的地址。这样maxresults就有指向原始对象的指针,而不仅仅是原始对象的副本。

在标题中执行以下操作:

MaxResults(Analysis2 *analysis);
Analysis2* analysis2;

在类定义中执行此操作:

MaxResults(Analysis2 *analysis)
{
    analysis2 = analysis;
}

并以这种方式创建对象:

Analysis2 analysis = Analysis2();
MaxResults maxresults = MaxResults(&analysis);