【问题标题】:Accessing member variables from aggregated class从聚合类访问成员变量
【发布时间】:2018-03-19 07:47:20
【问题描述】:

只是试图让stack.cpp 的推送函数将max_size_ 变量增加1。

数组.h:

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

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

堆栈.cpp:

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

}

堆栈.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_++;

【问题讨论】:

  • 你真的应该得到一个good book
  • :: 是作用域运算符,而不是成员选择运算符,即.。您已经看到了类似于例如的语法。 ArrayStack.max_size 之前?然而,这不是您唯一的问题,因为您尝试访问的成员变量是 private。如果向Array 添加元素,Array 类本身的大小不应该自动更新吗?

标签: c++ aggregation


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    如果不更改某些内容,您实际上无法做到这一点。 max_size_++;ArrayStack 的私有成员,因此您不能从 Stack 方法内部更改它。

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

    选项 2(更糟):Stack 类成为 ArrayStack 的朋友

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

    【讨论】:

      猜你喜欢
      • 2011-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-26
      • 2020-04-29
      • 1970-01-01
      相关资源
      最近更新 更多