在 C++ 中获取 "No valid copy constructor" return 结构

Getting "No valid copy constructor" in C++ on return struct

我目前正在使用 Visual Studio Community Edition 2019 在 C++ 中实现一个简单的二维向量 class Vector2f

当我尝试return一个新构造的方法时,例如:

return Vector2f((this->x/sum),(this->y/sum);

我得到一个提示:

no suitable copy constructor for Vector2f

和一个编译错误:

'return': cannot convert from 'Vector2f' to 'Vector2f'

我已经从头开始重写了 class 几次,但似乎仍然出现错误。不明白,到底是哪里出了问题?

Vector2f_struct.h

#pragma once

#ifndef PMP_VECTOR2F_STRUCT__H
#define PMP_VECTOR2F_STRUCT__H

namespace pmp
{
    struct Vector2f
    {
        /* Elements */
        float x;
        float y;

        /* Methods */

        // Constructors & Destructor
        Vector2f();
        Vector2f(float i, float j);
        Vector2f(Vector2f& og);
        virtual ~Vector2f();

        // Unary Operators
        float magnitude();
        Vector2f normal();
    };
};

#endif

Vector2f_struct.cpp

#include "pmp_Vector2f_struct.h"

#ifndef PMP_VECTOR2F_STRUCT__CPP
#define PMP_VECTOR2F_STRUCT__CPP

/* Dependencies */
#include <math.h>

namespace pmp
{
    Vector2f::Vector2f()
    {
        this->x = 0.0f;
        this->y = 0.0f;
        return;
    };

    Vector2f::Vector2f(float i, float j)
    {
        this->x = i;
        this->y = j;
        return;
    };

    Vector2f::Vector2f( Vector2f& og )
    {
        this->x = og.x;
        this->y = og.y;
        return;
    };

    Vector2f::~Vector2f()
    {
        this->x = 0.0f;
        this->y = 0.0f;
        return;
    };

    float Vector2f::magnitude()
    {
        float c2 = (this->x * this->x) + (this->y * this->y);
        return sqrt(c2);
    };

    Vector2f Vector2f::normal()
    {
        float sum = this->x + this->y;
        return Vector2f(this->x / sum, this->y / sum); // Error here.
    };

};

#endif

复制构造函数的参数有非常量引用类型

Vector2f(Vector2f& og);

在成员函数 normal 中 returned 复制了一个临时对象。您不能将临时对象与非常量左值引用绑定。

像这样重新声明复制构造函数

Vector2f(const Vector2f& og);

或者只是删除它的显式声明。在这种情况下,编译器会为您生成它。

注意构造函数和析构函数中的return语句是多余的