我正在编写 << 运算符的基本重载,因此我在类接口中添加了一个友元函数
namespace Warehouse
{
namespace Dto
{
class Product;
class AbstractOrder : public ICloneableItem
{
protected:
unsigned long _id;
std::string _name;
std::vector<Product*> _products;
public:
AbstractOrder();
virtual ~AbstractOrder();
double computePrice() const;
void addProduct(Product* product);
void removeProduct(Product* product);
void removeAllProducts();
void setName(const std::string& name) { _name = name; }
std::string getName() const { return _name; }
unsigned long getId() const { return _id; }
std::vector<Product*> getProductList() const { return _products; }
friend std::ostream& operator<<(std::ostream& os, const AbstractOrder& ord);
};
}
}
在实现文件中,这是函数的代码
using namespace Warehouse::Dto;
....
std::ostream& operator<<(std::ostream& os, const AbstractOrder& ord)
{
os << "[" << ord._id << "] Order " << ord._name << ": " << ord.computePrice();
return os;
}
为什么我收到以下错误?错误 1 错误 C2248:“Warehouse::Dto::AbstractOrder::_id”:无法访问在类“Warehouse::Dto::AbstractOrder”中声明的受保护成员
实际上我已经修复了它,在实现文件上的 operator<< 之前添加了命名空间。我不明白为什么即使在实现文件中我使用了using namespace Warehouse::Dto指令,我也必须这样做?