指针问题
Pointer trouble
我无法使指针正常工作。 在我的主文件中,我声明
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);
- 关于 c++ 函数中指针赋值的简单问题
- 链表指针问题
- C++ 关于指针取消引用的技术问题
- C++中的指针和常量问题不大
- 包含矢量指针的结构的内存释放问题
- 指针问题:从不兼容的类型"int"分配给"int *"
- 将字节数组转换为带有字节序问题的指针
- 关于如何使用指向主窗口的指针的 QT 问题
- 当成员值从指针更改为非指针时,C++常量问题
- 为什么循环会导致指针出现问题?
- 使用指针计算堆栈问题的大 O 表示法
- 构造函数 (C++) 中的 char 指针参数存在问题
- 指向包含对齐 C 结构C++类的 C 指针的对齐问题
- 涉及指针和手动实现的矩阵类的问题
- 从基指针到派生的强制转换问题
- 迭代器的指针操作问题
- 64 位迁移问题:指针更改
- C++模板使用问题指针
- 跳到C++第13章练习问题4-指针
- 用std::pair数组初始化std::map问题(指针错误?)