cpp:使用 - >

时间:2017-03-06 00:30:11

标签: c++ class shared-ptr member

我有一个关于如何在 cpp 中使用 - > 的问题。我需要做的是通过使用在C类中创建的指针 a 来获取B类的私有成员值代码,我的代码具有如下结构: 我在这里粘贴原始代码:

//detector.hpp
class Detector{
public:
  std::string name;
  int code;
}

//detectorH.hpp
class detectorH : public Detector {
private:
  std::string name;
  int code;
public:
  detectorH();
std::shared_ptr<Detector> h_detector();
}

//detectorH.cpp
detectorH::detectorH(){
  name = "h";
  code = 1111;
}
std::shared_ptr<Detector> h_detector(){
  return std::make_shared<detectorH>();
}

//findCode.cpp
class findCode{
private:
  std::vector<std::shared_ptr<Detector>> detectors;
public:
  findCode(){
   detectors.push_back(h_detector());
  void find(){
   for(auto& d:detectors){
     std::cout << d->code << std::endl;
   }
  }
 }
};

但问题是 cout 始终为0,这意味着我未能获得正确的值。我不知道为什么......并且没有错误消息所以我不知道如何解决它...任何人都可以给我一个提示?非常感谢!

1 个答案:

答案 0 :(得分:0)

正如评论者所说 - code中的Acode中的B无关。此外,当您通过指向code的指针访问A时,您可以访问A::code。由于我们并不真正了解您希望实现的目标,因此您可以从code移除B

class A {
public:
    int code;
};

class B : public A {
public:
    B() { code = 1111 };
};

或将其初始化为某个值:

class A {
public:
    A() : code{ 2222 } { }
    int code;
};

class B : public A {
public:
    B() : code{ 1111 } { }
private:
    int code;
};

您也可以在B的构造函数中执行此操作:

class B : public A {
public:
    B() : code{ 1111 } { A::code = 2222; }
private:
    int code;
};