<< 演算子の基本的なオーバーロードを書いているので、クラス インターフェイス内にフレンド関数を追加しました。
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ディレクティブを使用している場合でも、なぜそれをしなければならないのかということです。