从聚合类访问成员变量

时间:2017-10-07 18:35:31

标签: c++ aggregation

试图让stack.cpp的推送功能将max_size_变量增加1。

Array.h:

template <typename T>
class Array: public BaseArray<T>
{
public:

//loads of fun code
private:
  size_t max_size_;
};

Stack.cpp:

//...even more fun code...
template <typename T>
void Stack <T>::push (T element)
{
    ArrayStack::max_size_++;

}

Stack.h:

template <typename T>
class Stack
{
public:

  Stack (void);

private:
    Array <T> ArrayStack; 
};

错误:

 error: ‘ArrayStack’ is not a class or namespace
  ArrayStack::max_size_++;

或者如果我只用max_size_运行它:

template <typename T>
void Stack <T>::push (T element)
{

    max_size_++;
}

error: ‘max_size_’ was not declared in this scope
  max_size_++;

2 个答案:

答案 0 :(得分:0)

如果不改变某些事情,你实际上无法做到这一点。 max_size_++;ArrayStack的私人成员,因此您无法在Stack方法中对其进行更改。

选项1(更好):ArrayStack添加方法,将值增加一void incMaxSize() { max_size_++; }并改为调用

选项2(更糟):让Stack班级成为ArrayStack的朋友

选项3(更糟糕的是):将max_size_变量公开,然后将调用更改为ArrayStack.max_size_++;

答案 1 :(得分:0)

由于您在Array类中创建了max_size_ private,因此您需要创建一个getter和setter来在该类之外访问它。然后在Stack类中,您可以获取max_size_值并将其保存在局部变量中,然后将其设置为1 +它的当前值以实现max_size _ ++