指针麻烦

时间:2011-06-09 16:43:13

标签: c++ pointers pass-by-reference pass-by-value

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

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

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

MaxResults(Analysis2 analysis);
Analysis2 * analysis2;

在MaxResults类中

MaxResults(Analysis2 analysis)
{
    analysis2 = analysis;
}

当我尝试从更改的分析中访问事物时,analyze2似乎没有跟上。我该如何解决这个问题,是否有一种简单的方法可以记住未来的指针,引用和解除引用?

3 个答案:

答案 0 :(得分:3)

如果您希望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,以防:语法对您来说是新的。

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

答案 1 :(得分:1)

我不确定那是怎么编译的;它不应该。问题是你的构造函数。

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

MaxResults(Analysis2& analysis);

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

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

在一个不相关的注释中:为构造函数使用成员初始化列表是一种很好的方式。

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

答案 2 :(得分:0)

当您致电MaxResults maxresults = MaxResults(analysis);时,您的构造函数会获得analysis的副本。您需要将引用传递给analysis,以便构造函数获取它可以存储在指针中的地址。那样maxresults有一个指向原始对象的指针,而不仅仅是原始对象的副本。

在标题中执行以下操作:

MaxResults(Analysis2 *analysis);
Analysis2* analysis2;

在类定义中执行此操作:

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

以这种方式创建对象:

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