c-如何从类内部实例化的对象访问私有变量

我试图更改对象内部的类的私有变量,该对象在该类内部初始化.
我的意图可以从下面的简单示例中得出.
从obj调用的Increment应该增加BaseClass :: stuff.

template <typename ObjectType>
class BaseClass{
 public:

  int Increment(){
    return obj.Increment();
  }

 private:
  int stuff = 0;
  ObjectType obj;
};

class ObjectType{
  public:     
   int Increment ()
   {
      return BaseClass<ObjectType>::stuff++;
   };
};

int main () {
  BaseClass<ObjectType> base;
  base.Increment(); // should increase stuff by 1;
}

我可以想到的一种方法是将东西作为参数传递给obj.Increment().

有没有一种方法可以在不将其作为参数传递的情况下实现?

解决方法:

您的示例有一些错误.
修复并添加好友说明符后,它应如下所示:

template <typename ObjectType>
class BaseClass{
public:
    friend ObjectType;

    int Increment(){
        return obj.Increment();
    }

private:
    static int stuff;
    ObjectType obj;
};

template<typename T>
int BaseClass<T>::stuff = 0;

class ObjectType{
public:     
    int Increment ()
    {
        return BaseClass<ObjectType>::stuff++;
    };
};

int main () {
    BaseClass<ObjectType> base;
    base.Increment(); // should increase stuff by 1;
}
上一篇:c-两个模板类由彼此组成


下一篇:c-在派生类被模板化时访问基本成员数据错误