我有一个与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中定义默认构造函数之外,还有其他方法可以解决此错误吗?
答案 0 :(得分:2)
但是不是编译器自动调用的默认构造函数吗?
不,不是。只要您提供自己的构造函数,编译器就不再提供默认构造函数。你要么必须制作一个,要么就可以使用
Name() = default;
在头文件中的类声明中声明一个默认构造函数。
或者您可以切换到使用std::vector
,这将允许您拥有“数组”,但允许您一次添加一个对象。