敌不过“运算符=”(操作数的类型是“书”和“<大括号包围的初始化列表>”)
#include<iostream> #include <conio.h>
using namespace std;
struct book
{ int bookid;
char title[20];
float price;
}b2;
int main()
{
b2={100,"c++ by saurabh",105.2}; //values initialised during variable declaration
cout<<"\n"<<b2.bookid;
cout<<b2.title<<" "<<b2.price;
return 0;
getch();
}
这上面的代码显示在输出误差这样的:敌不过“运算符=”(操作数的类型是“书”和“<大括号包围的初始化列表>”)
C:\Users\shandude\Documents\codeblock\cprog\struct2.cpp|13|error: no match for 'operator=' (operand types are 'book' and '')|
C:\Users\shandude\Documents\codeblock\cprog\struct2.cpp|5|note: no known conversion for argument 1 from '' to 'const book&'|
回答:
什么你正在做的不是初始化,而是分配,因为b2
已经在早些时候宣布。您需要在变量声明点初始化:
struct book { int bookid;
char title[20];
float price;
} b2 = {100,"c++ by saurabh",105.2}; //values initialised during variable declaration
int main()
{
cout<<"\n"<<b2.bookid;
cout<<b2.title<<" "<<b2.price;
return 0;
getch();
}
回答:
您可以使用:
b2 = book{100,"c++ by saurabh",105.2};
PS
我将建议改变成员变量title
到std::string
。使用char
阵列来表示用户代码串是在2017年
struct book {
int bookid;
std::string title;
float price;
};
回答:
您正试图通过list initialization
初始化b2
不合时宜。您可以阅读reference以了解如何对其进行初始化。
有很多方法。一个简单的方法是:
book b2{100,"c++ by saurabh",105.2};
回答:
你使用什么编译器?
删除#include <conio.h>
并将float
替换为double
后,Clang和VC++都接受此代码,而GCC抱怨。我认为这是GCC的一个bug。
虽然这不是初始化,但它等同于将初始化程序列表作为参数调用赋值运算符。赋值运算符的参数是const book&
,并使用此初始化程序列表来初始化此引用已定义良好。该计划也是明确的。
以上是 敌不过“运算符=”(操作数的类型是“书”和“<大括号包围的初始化列表>”) 的全部内容, 来源链接: utcz.com/qa/260386.html