在 .cpp 文件中实现时访问私有成员
Accessing private members when implementing in a .cpp file
我正在尝试在 .cpp 文件中实现 .h 文件的代码。这是头文件:
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 需要将东西压入私有堆栈的能力,但如果我尝试引用它们,我会收到 "unable to resolve identifier" 错误在 .cpp 文件中。
这可能真的很明显,但是如何在 .cpp 文件中实现 public 成员的同时访问私有成员?我无法修改头文件。
当您在 class 之外实现成员函数时,您需要在所有成员函数的名称前加上前缀 ClassName::
。
这样一来,您就可以使用各自的名称访问每个私有变量。
另外不要忘记 #include
将 class 的头文件放在 .cpp
文件的顶部。
double ProcessOrders::process_shipment(int q, double c)
{ /*...*/ Inventory_on_hand. //... }
double ProcessOrders::process_order(int q)
{ /*...*/ }
您可以在 class 的 .cpp 中访问它们。头文件包含声明而 .cpp 文件包含定义。
在上面的代码中,两个堆栈都是私有的,这意味着它们只能在同一个 class 的函数中访问。因此,当您在 .cpp 文件中定义 process_shipment 时,您可以将任何内容压入堆栈。
您可以在
中访问 orders_to_be_filled 堆栈
double ProcessOrders::process_shipment(int q, double c)
使用代码
this.orders_to_be_filled;
我正在尝试在 .cpp 文件中实现 .h 文件的代码。这是头文件:
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 需要将东西压入私有堆栈的能力,但如果我尝试引用它们,我会收到 "unable to resolve identifier" 错误在 .cpp 文件中。
这可能真的很明显,但是如何在 .cpp 文件中实现 public 成员的同时访问私有成员?我无法修改头文件。
当您在 class 之外实现成员函数时,您需要在所有成员函数的名称前加上前缀 ClassName::
。
这样一来,您就可以使用各自的名称访问每个私有变量。
另外不要忘记 #include
将 class 的头文件放在 .cpp
文件的顶部。
double ProcessOrders::process_shipment(int q, double c)
{ /*...*/ Inventory_on_hand. //... }
double ProcessOrders::process_order(int q)
{ /*...*/ }
您可以在 class 的 .cpp 中访问它们。头文件包含声明而 .cpp 文件包含定义。
在上面的代码中,两个堆栈都是私有的,这意味着它们只能在同一个 class 的函数中访问。因此,当您在 .cpp 文件中定义 process_shipment 时,您可以将任何内容压入堆栈。
您可以在
中访问 orders_to_be_filled 堆栈double ProcessOrders::process_shipment(int q, double c)
使用代码
this.orders_to_be_filled;