一个 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",但允许您一次向其添加一个对象。
我有一个与 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",但允许您一次向其添加一个对象。