指针麻烦
我无法让指针正常工作。在我的主文件,我宣布指针麻烦
Analysis2 analysis = Analysis2();
MaxResults maxresults = MaxResults(analysis);
在我的maxResults类
现在,我想指出的分析,这样,如果任何变量的改变我仍然得到正确的值。现在,我宣布在的maxResults头部构造为
MaxResults(Analysis2 analysis);
Analysis2 * analysis2;
而且在类的maxResults
MaxResults(Analysis2 analysis)
{
analysis2 = analysis;
}
当我尝试从改变分析访问的事情,分析2似乎并没有被跟上。我该如何解决这个问题,是否有一种简单的方法来记住指针以及将来的引用和解引用?
如果你想MaxResults
的指针保持到Analysis2
对象,你应该做的是这样的:
class MaxResults {
public:
MaxResults(Analysis* an) : analysis(an) {}
private:
Analysis* analysis;
};
,构建这样的:
Analysis2 analysis = Analysis2();
MaxResults maxresults = MaxResults(&analysis);
注意地址的使用-of操作符(&)捕获analysis
的地址,并将其作为指针传递给构造函数MaxResults
,该构造函数将指针保存在成员中(使用初始化列表或多或少相当于在构造函数体内执行analysis = an
,以防:
语法对您而言是新的)。
如需进一步阅读,请参考参考资料(当然,一旦您对指针有了更好的理解)。在这种情况下,引用可能是首选。
我会*不推荐使用通过引用进行调用并保持比对象更长的功能调用本身。这里使用指针是完全正确的。 – fredoverflow 2011-06-09 16:59:22
我不太确定那是如何编译的;它不应该。问题是你的构造函数。首先,如果你的构造函数只需要一个参数Analysis2
,那么这个参数是按值传递的;该对象总是被复制。指针无法指向传入的实际对象,因为构造函数只会获取它的副本。你需要使用一个基准参数:
MaxResults(Analysis2& analysis);
其次,你不能直接将对象分配给一个指向对象。您需要使用&
运算符来获取对象的地址。
MaxResults(Analysis2& analysis)
{
analysis2 = &analysis;
}
在一个不相关的说明:使用构造函数的成员初始值设定项列表是一种很好的风格。
MaxResults(Analysis2& analysis)
: analysis2(&analysis)
{
}
它正在编译,直到我意识到analysis2不是镜像分析,然后当我将代码更改为上面所看到的代码时,代码崩溃了,而我只是不知道如何正确指定指针 – mrswmmr 2011-06-09 16:52:51
啊,我明白了。是的,这是因为'analysis2'的类型是指向Analysis2的指针,'analyze'的类型就是Analysis2。编译器不会自动从一个转换到另一个。你需要使用操作符。从一个对象到一个指向该对象的指针的运算符是'&';另一个方向是'*'。 (注意:从技术上讲,这些不是转换,但这是一般想法。) – 2011-06-09 16:54:28
我不会混用这样的引用和指针。只需使用指针并让客户端输入额外的'&'字符。 – fredoverflow 2011-06-09 17:00:22
当你调用MaxResults maxresults = MaxResults(analysis);
,你的构造得到的analysis
副本。您需要传递对analysis
的引用,以便构造函数获取它可以存储在指针中的地址。这样maxresults
有一个指向原始对象的指针,而不仅仅是原始对象的副本。
做这样的事情在头:
MaxResults(Analysis2 *analysis);
Analysis2* analysis2;
为此在类定义:
MaxResults(Analysis2 *analysis)
{
analysis2 = analysis;
}
并创建对象是这样的:
Analysis2 analysis = Analysis2();
MaxResults maxresults = MaxResults(&analysis);
其中哪些是应该是指针?请尝试发布类似C++的东西。 – 2011-06-09 16:46:09
我想要分析2指向分析(因此指向在该作业之后所做的所有更改) – mrswmmr 2011-06-09 16:48:18