在c ++中初始化在private类中声明的struct对象

时间:2010-10-03 15:47:41

标签: c++

我在我的类中声明我的struct对象是私有的,我正在使用构造函数初始化它们,但我的样式检查器说我的struct类型的成员函数没有初始化。任何人都可以在这方面帮助我,我将非常感谢你。

以下是我的代码,请为此问题提出一些解决方案

class Datastructure{

  //forward decleration
  struct Ship;

public:

  //Constructor DS class
  Datastructure();

 //Destructor DS class
  ~Datastructure();



private:

   struct Ship{
     std::string s_class;
     std::string name;
     unsigned int length;
     Ship();
     Ship(const std::string& shipClass, const std::string& shipName,
          unsigned int len);
   };

  Ship minShip;
  Ship maxShip;
  std::vector<Ship> shipVector;
};

#endif

它给了我以下警告

  CIMP, line 17: Uninitialized member variables in class 'Datastructure'.
  FSCH, line 17: No access specifiers at the beginning of class
                 'Datastructure'.
  IVAP, line 62: Field 'minShip' in class 'Datastructure' is not initialized.
  IVAP, line 63: Field 'maxShip' in class 'Datastructure' is not initialized.
  IVAP, line 64: Field 'shipVector' in class 'Datastructure' is not
                 initialized.

2 个答案:

答案 0 :(得分:0)

成员变量minShipmaxShip需要在DataStructure构造函数中初始化。例如,

DataStructure() : minShip(), maxShip(), shipVector() {}

<击>

虽然不是不正确,但最好提供Ship构造函数的实现,以便length初始化为已知(而不是随机)值。

Ship() : length() {}

以上语法与

相同
Ship() : length( 0 ) {}

,因为

int i = int();

i初始化为0

答案 1 :(得分:0)

根据C ++标准,minShip,maxShip和shipVector已使用其默认构造函数进行初始化。

但是,您表示您正在使用样式检查器。您的样式指南可能需要显式调用默认构造函数。这样做的一个原因是确保您调用正确的构造函数而不依赖于自动行为 - 这不是标准所要求的,甚至是典型的C ++程序员所做的,但如果这是您的风格,并且您的样式检查器标记它,你可能只需要遵守。

在编译器不需要的不同组织中存在各种样式规则,但也许使开发人员更容易理解彼此的代码。