C++ 在C++;98';dvd1&x27;必须由构造函数初始化,而不是由';{…}';

C++ 在C++;98';dvd1&x27;必须由构造函数初始化,而不是由';{…}';,c++,c++98,C++,C++98,如何初始化DVD 1 C:\Users\SuperUser\Google Drive>g++-o问题1.cpp 问题1.cpp:在函数“int main()”中: 问题1.cpp:39:76:错误:在C++98中,“dvd1”必须由构造函数初始化,而不是由“{…}”初始化 dvd dvd 1={“僵尸”、“BBC”、“詹姆斯”、“英语”、“Alw”,20122017060120170630} #包括 #包括 使用名称空间std; 类dvd { 字符串movieName、movieProdComp

如何初始化DVD 1

C:\Users\SuperUser\Google Drive>g++-o问题1.cpp

问题1.cpp:在函数“int main()”中:

问题1.cpp:39:76:错误:在C++98中,“dvd1”必须由构造函数初始化,而不是由“{…}”初始化

dvd dvd 1={“僵尸”、“BBC”、“詹姆斯”、“英语”、“Alw”,20122017060120170630}

#包括
#包括
使用名称空间std;
类dvd
{
字符串movieName、movieProdComp、movieeadactor、movieLanguage、renterName;
int releaseYear、rentDate、returnDate;
公众:
dvd(字符串mn、字符串mpc、字符串mla、字符串ml、字符串rn、整数ry、整数rd、整数retd);
作废打印();
};
dvd::dvd(字符串mn、字符串mpc、字符串mla、字符串ml、字符串rn、整数ry、整数rd、整数retd){
movieName=mn;
movieProdComp=mpc;
movieLeadActor=mla;
电影语言=毫升;
renterName=rn;
释放年份=ry;
rentDate=rd;
returnDate=retd;
}
作废dvd::打印(){
cout这被调用,对于非聚合类型,它仅在C++11中受支持:

dvd dvd1 = {"Zombie","BBC","James","English","Alw",2012,20170601,20170630};
对于C++98,您可能需要对其进行一些更改,以便像往常一样调用构造函数:

dvd dvd1("Zombie","BBC","James","English","Alw",2012,20170601,20170630);
dvd
是一个非-,在支持C++11之前,无法使用带括号的初始化器初始化它。(更确切地说,您要做的是复制列表初始化。)

对于C++98,您可以编写

dvd dvd1 ("Zombie","BBC","James","English","Alw",2012,20170601,20170630);
dvd dvd1 = dvd("Zombie","BBC","James","English","Alw",2012,20170601,20170630);

在C++98中,只有当它是聚合类型时,才可以使用像
dvd dvd1={…};
这样的函数;在这种情况下,
dvd
有一个用户定义的构造函数,然后就不使用了。

Nit:只有在C++11中有显式构造函数的类才支持它。C++98是通过
struct simple{int i,j;}value={0,1}找到的“谢谢”,我添加了一个关于正确构造函数的注释。关于结构初始化,我个人的意见是省略这个通知。C++希望结构是类,所以我们不要谈论它失败的时刻:)我认为你的编辑使答案更糟。注意C++ 98同样对<代码>类简单感到满意。{public:inti,j;}value={0,1}
。试图假装列表初始化不起作用,除非你有一个合适的构造函数是愚蠢的。@MartinBonner回过头来。在这一点上,我感到困惑。他说brace init只支持从
c++11
开始,而我清楚地看到带有
-std=c++98
的GCC编译你的示例时甚至没有警告g、 这是怎么回事?@iehrlich我相信cppreference意味着在C++11之后,除了聚合初始化之外,列表初始化是受支持的。聚合初始化一直是合法的,它是在C中初始化结构的方式
dvd dvd1 ("Zombie","BBC","James","English","Alw",2012,20170601,20170630);
dvd dvd1 = dvd("Zombie","BBC","James","English","Alw",2012,20170601,20170630);