2017-06-10 12 views
0

.hppファイル用のコードを.cppファイルに実装しようとしています。.cppファイルに実装するときにプライベートメンバーにアクセスする

class ProcessOrders 
{ 
public: 
    double process_shipment(int q, double c); 
    double process_order(int q); 
private: 
    std::stack<Inventory> Inventory_on_hand; // keep track of inventory on hand 
    std::stack<Order> orders_to_be_filled;  // keep track of orders 
}; 

問題は関数process_shipmentとPROCESS_ORDERはプライベートスタック上に物事をプッシュする能力を必要とすることであるが、私はを参照しようとする場合、私は「識別子を解決することができません」のエラーが表示されます。これは、ヘッダファイルでありますそれらは.cppファイルにあります。

これはおそらく明らかですが、.cppファイルに公開されているものを実装している間はプライベートメンバーにどのようにアクセスできますか?私はヘッダーファイルを変更することはできません。

+6

を使用して

double ProcessOrders::process_shipment(int q, double c) 

内orders_to_be_filledスタックにアクセスすることができます。 – Rakete1111

+0

私のケースでは、メソッドがスーパークラスで最初に宣言されたためにエラーが発生し、 'protected'だったはずの' private'でした。 –

答えて

0

クラスの外でメンバー関数を実装する場合は、すべてのメンバー関数の名前にClassName::という接頭辞を付ける必要があります。

これを行うと、それぞれの名前を持つすべてのプライベート変数にアクセスできます。

.cppファイルの先頭にあるクラスのヘッダーファイル#includeも忘れずにください。

double ProcessOrders::process_shipment(int q, double c) 
{ /*...*/ Inventory_on_hand. //... } 
double ProcessOrders::process_order(int q) 
{ /*...*/ } 
0

クラスの.cppにアクセスできます。ヘッダーファイルには宣言が含まれ、.cppファイルには定義が含まれます。

上記のコードでは、両方のスタックがプライベートなので、同じクラスの関数内でしかアクセスできません。したがって、.cppファイル内のprocess_shipmentを定義するときは、スタック内の何かを押すことができます。

あなたは[MCVE]作成してくださいすることができ、コード

this.orders_to_be_filled; 
関連する問題