一个 class 在另一个 class/ 构造函数中的静态对象数组

Static Array of objects of one class inside another class/ Constructors

我有一个与 C++ 中的默认构造函数相关的问题。

以下是 classes 和代码:

class Name
{
  public: 
         Name(string name);
  private:
         m_name;
}

class DataBase
{
 public: 
      DataBase();
      void addToDB(string name);
      Name* getPtrToName(string name);
 private:
      Name m_Name[10];
      int NoOfEntries;
 }

现在我正在尝试创建 class 数据库的对象并向数据库添加新条目。

 /*
 * Name.cpp
 */
Name::Name(string name) //overloaded constructor
{
   m_name = name;
}


/*
* DataBase.cpp
*/
DataBase::addToDB(string name) // add entries to the database
{
    Name newEntryToDB(name);
    m_Name[NoOfEntries] = newEntryToDB;
    NoOfEntries++;
 }

DataBase::DataBase() // gives an error stating no matching call for function Name::Name() 
{
  NoOfEntries = 0; 
}

错误“没有匹配的函数调用Name::Name()

现在我明白了,我可以简单地在Name.cpp中定义一个默认构造函数并解决编译错误。 但是默认构造函数不是编译器自动调用的吗? 这应该可以避免错误的触发。

除了在 Name.cpp 中定义默认构造函数外,还有其他方法可以解决此错误吗?

But isn't the default constructor invoked by the compiler automatically?

不,不是。一旦您提供自己的构造函数,编译器将不再提供默认构造函数。你要么必须制作一个,要么你可以使用

Name() = default;

在头文件中的class声明中声明一个默认构造函数。

或者,您可以切换到使用 std::vector,这将允许您拥有一个 "array",但允许您一次向其添加一个对象。