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

时间:2016-11-03 12:22:17

标签: c++ arrays constructor default-constructor

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

以下是课程和代码:

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;
 }

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

 /*
 * 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中定义默认构造函数之外,还有其他方法可以解决此错误吗?

1 个答案:

答案 0 :(得分:2)

  

但是不是编译器自动调用的默认构造函数吗?

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

Name() = default;

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

或者您可以切换到使用std::vector,这将允许您拥有“数组”,但允许您一次添加一个对象。