我无法让我的指针正常工作。在我的主文件中,我声明了
Analysis2 analysis = Analysis2();
MaxResults maxresults = MaxResults( analysis);
现在在我的MaxResults类中,我想指向分析,这样如果它的任何变量发生变化,我仍然会得到正确的值。现在我将MaxResults标头中的构造函数声明为
MaxResults(Analysis2 analysis);
Analysis2 * analysis2;
在MaxResults类中
MaxResults(Analysis2 analysis)
{
analysis2 = analysis;
}
当我尝试从更改的分析中访问事物时,analyze2似乎没有跟上。我该如何解决这个问题,是否有一种简单的方法可以记住未来的指针,引用和解除引用?
答案 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);