c ++ struct operator:从请求转换为非标量类型

时间:2014-12-21 08:46:11

标签: c++ struct type-conversion operator-overloading

我想要做的是定义一个结构相等的运算符。但似乎有一些问题。如何修复此代码?

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;
                 ^

2 个答案:

答案 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;