所以我陷入了一些我认为很容易的事情。
注意:以下所有内容均适用于C ++ 11及更高版本。
让我们开始吧。我有一个名为“员工”的班级。其构造如下:
Employee::Employee(const string& first, const string& last, const string& ssn)
: firstName(first), lastName(last), socialSecurityNumber(ssn) {}
此外,在尝试创建对象时,在我的主要内容中,我执行以下操作:
void main()
{
string firstName;
string lastName;
string socialSec;
Employee salariedEmployee{firstName, lastName, socialSec};
}
我收到错误:
错误:无法将变量'salariedEmployee'声明为抽象 输入'员工'
然后我尝试将对象创建为指针,如下所示:
Employee *salariedEmployee{&firstName, &lastName, &socialSec};
并收到错误:
错误:标量对象'salariedEmployee'在初始化程序中需要一个元素
我不明白我做错了什么。我习惯编码是以前版本的C ++ 11,但我正在尝试学习使用花括号(统一初始化)的这些新技巧。我做错了什么(在这两种情况下)?
P.S。我google了很多,但我很困惑该怎么做。我保存的两个资源就是这些(但已经阅读了更多东西):
答案 0 :(得分:3)
错误:无法声明变量' salariedEmployee'是抽象类型'员工'
此错误与您调用构造函数的方式无关。它只是说你试图实例化一个尚未完全定义的类型,它的一些方法是纯虚拟的。
例如,这有效:
#include <string>
struct Employee
{
Employee(const std::string& first, const std::string& last, const std::string& ssn);
std::string firstName;
std::string lastName;
std::string socialSecurityNumber;
};
Employee::Employee(const std::string& first, const std::string& last, const std::string& ssn)
: firstName(first), lastName(last), socialSecurityNumber(ssn)
{}
int main()
{
std::string firstName;
std::string lastName;
std::string socialSec;
Employee bob{firstName, lastName, socialSec};
}
但是,如果您向fire
添加纯虚拟Employee
方法,则无法编译:demo。
答案 1 :(得分:-1)
虽然它在我的电脑上工作正常。在您的情况下,问题可能是uniform initialization
。基本上,构造函数是一种特殊的class Method
(函数,排序)。
因此,将参数传递给函数的方法是使用括号()
,而不是通过统一初始化。