重载的提取运算符无法访问成员变量

时间:2017-06-14 02:31:01

标签: c++ encapsulation

我有以下头文件:

#include <iostream>
#include "product.h"

using namespace std;

class ProductInfo : Product
{
  int UPC;

public:
  ProductInfo() : Product(NULL, 0.0), UPC(0)
  friend istream& operator>>(istream& is, ProductInfo& pinfo);
};

Product包含受保护的变量float price

当我尝试在我的提取运算符中更改float price时,我的IDE(CLion)告诉我protected 'Product::price is inaccessible'

以下是cpp文件中的相关代码:

#include "productinfo.h"

istream& operator>>(istream& is, ProductInfo& pinfo)
{
  char info[256];

  if (is.getline(info, 256))
  {
    strtok(info, ",");
    pinfo.UPC = atoi(info);
    pinfo.setName(strtok(NULL, ","));
    pinfo.price = atof(strtok(NULL, ","));
  }

  return is;
}

我做错了什么或者这是我的IDE的问题吗?

1 个答案:

答案 0 :(得分:0)

class ProductInfo : Product表示私人继承;因此ProductInfo(及其朋友)无法按名称访问Product的私人或受保护成员。

可能你想使用公共继承:

class ProductInfo : public Product