首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >作为成员变量的引用

作为成员变量的引用
EN

Stack Overflow用户
提问于 2011-12-05 01:48:58
回答 3查看 1K关注 0票数 0

有人能解释一下为什么代码中的类TaxWay不能保存一个由引用初始化的成员变量Bank吗?我应该对代码中的哪些内容进行更改才能使其正确?当我将成员变量更改为引用Bank&时,它就可以工作了。我认为同样的事情应该发生在“非引用变量”上。怎么做呢?

代码语言:javascript
运行
复制
class Bank;

class TaxWay : public Way
{
  public:
    TaxSquare(int, int, Bank&);
    virtual void process();

  private:
    int taxAmount;
    Bank bank;
};

TaxWay::TaxWay(int anID, int amount, Bank& theBank) 
: Way(anID),taxAmount(amount),bank(theBank) 
{
}

我创建一个对象如下:

代码语言:javascript
运行
复制
TaxWay TaxWay9(9,150, theBank);
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-12-05 01:54:37

在本例中,因为您没有定义Bank类,所以TaxWay类不能保存银行的副本。至少必须知道Bank类的大小,这样才能分配空间。

另一方面,根据Bank包含的内容,复制它可能不是一个好主意。这也会复制银行里的钱吗?:-)

票数 2
EN

Stack Overflow用户

发布于 2011-12-05 01:54:21

重要的两点:

  • 如果您想将成员变量声明为Bank bank,则必须包括具有类Bank定义的头文件。正如您所做的那样,只要向前声明就会导致编译error.
  • However,如果您想将它声明为Bank & bankBank *bank,那么向前声明就足够了。在这种情况下,除非您想访问Bank的任何成员(例如,在类TaxWay).

的某些成员函数的内联定义中),否则不需要Bank的定义

票数 6
EN

Stack Overflow用户

发布于 2011-12-05 01:54:23

有一件事(这可能是你的问题,也可能不是你的问题)是你将Bank声明为一个没有定义的转发声明。当编译器到达TaxWay时,您将无法声明Bank类型的成员变量,因为编译器还不知道有关Bank类的任何信息。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8377290

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档