我想要做的是定义一个结构相等的运算符。但似乎有一些问题。如何修复此代码?
struct Rectangle
{
public:
double w;
double h;
Rectangle& operator=(int wh)
{
w=wh;
h=wh;
return *this;
}
};
int main()
{
Rectangle rect=5;
return 0;
}
命令:
$ g++ -std=c++11 test.cpp
错误:
test.cpp: In function ‘int main()’:
test.cpp:16:17: error: conversion from ‘int’ to non-scalar type ‘Rectangle’ requested
Rectangle rect=5;
^
答案 0 :(得分:4)
对于您拥有的代码,您还需要指定一个适当的构造函数,同时使用int
struct Rectangle {
public:
double w;
double h;
Rectangle(int wh) {
w=wh;
h=wh;
}
};
在初始化该变量时不调用赋值运算符。
Rectangle rect=5; // Constructor call
Rectangle rect2;
rect2 = 5; // Assignment operator call
答案 1 :(得分:0)
Rectangle rect=5;
要使此语句有效,您必须提供单个参数非显式构造函数。
struct Rectangle
{
public:
Rectangle(int x) {}
}
请记住,Rectangle rect=5
是对构造函数的调用,而不是赋值运算符。
但是,如果您略微修改通话,也可以取消功能: -
Rectangle rect1;
rect1 = 5;