我有一个与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;
}
现在,我正在尝试创建数据库类的对象,并将新条目添加到数据库中。
/*
* 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中定义默认构造函数之外,还有其他解决此错误的方法吗?
但是编译器不是自动调用默认构造函数吗?
不它不是。一旦提供了自己的构造函数,编译器将不再提供默认的构造函数。您要么必须制造一个,要么就可以使用
Name() = default;
在头文件的类声明中声明一个默认的构造函数。
另外,您可以切换到使用,std::vector
这将允许您拥有一个“数组”,但一次只能向其中添加一个对象。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句