You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++:如何在类成员函数中访问构造函数传入的Boo结构体成员?

问题:如何在MyClass的Method中访问Boo结构体的theDataINeed?

我在类外部定义了如下结构体:

struct Boo : public otherClass {
public:
  const float theDataINeed;
};

class MyClass {
public:
  MyClass();
  MyClass(const Boo& Setup);

protected:
  void Method();
};

这种结构较为特殊,通过第二个构造函数关联到MyClass的Boo结构体实例没有永久命名。我尝试在MyClass的Method()中访问theDataINeed,但直接使用theDataINeed或Setup.theDataINeed均失败(Setup仅为构造函数参数,并非类的永久成员)。构造函数实现如下:

MyClass::MyClass(const Boo& Setup) 
  : otherClass(Setup) {
}

想请教正确的访问语法是什么?


解答

核心问题是你的MyClass没有保存Boo实例的相关数据:

  • Setup只是构造函数的临时参数,构造函数执行完毕后就会被销毁,无法在后续的Method()中访问
  • MyClass仅继承自otherClass,并没有继承Boo,而theDataINeed是Boo独有的成员,不是otherClass的一部分,所以直接调用theDataINeed会找不到该成员

有两种可行的解决方式:

方式1:在MyClass中存储单个需要的成员值

如果只需要theDataINeed这一个值,可以在MyClass中添加对应的成员变量,在构造时直接保存该值:

class MyClass {
public:
  MyClass();
  MyClass(const Boo& Setup);

protected:
  void Method();
private:
  const float m_theDataINeed; // 添加成员变量存储需要的值
};

// 构造函数初始化列表中赋值
MyClass::MyClass(const Boo& Setup) 
  : otherClass(Setup), m_theDataINeed(Setup.theDataINeed) {
}

// 在Method中直接访问
void MyClass::Method() {
  // 使用m_theDataINeed即可,比如:
  float value = m_theDataINeed;
}

方式2:在MyClass中保存Boo实例的引用或拷贝

如果后续可能需要访问Boo的其他成员,可以直接保存整个Boo实例:

  • 如果能保证传入的Boo实例生命周期比MyClass长,可以保存引用:
class MyClass {
public:
  MyClass();
  MyClass(const Boo& Setup);

protected:
  void Method();
private:
  const Boo& m_boo; // 保存Boo的引用
};

MyClass::MyClass(const Boo& Setup) 
  : otherClass(Setup), m_boo(Setup) {
}

void MyClass::Method() {
  float value = m_boo.theDataINeed;
}
  • 如果无法保证生命周期,或者需要独立的实例,可以保存拷贝:
class MyClass {
public:
  MyClass();
  MyClass(const Boo& Setup);

protected:
  void Method();
private:
  Boo m_boo; // 保存Boo的拷贝
};

MyClass::MyClass(const Boo& Setup) 
  : otherClass(Setup), m_boo(Setup) {
}

void MyClass::Method() {
  float value = m_boo.theDataINeed;
}

内容的提问来源于stack exchange,提问作者DSiegmeyer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 08:10:31