gpt4 book ai didi

c++ - 重载 "="运算符时无法将数组元素分配给类变量

转载 作者:行者123 更新时间:2023-11-30 00:44:41 26 4
gpt4 key购买 nike

我是 C++ 编程的新手,所以也许这就是为什么我无法弄清楚为什么这个作业不起作用的原因。在我的课上,我想重载“=”运算符。我指定了一个函数,它将变量输出为数组。在重载中,我想将这些变量分配给新对象。

 obj_new = obj_with_variables

重载:

  obj_new_x=obj_with_values_parameters()[0];
obj_new_y=obj_with_values_parameters()[1];

代码如下:

// Test1.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
#include "string"

using namespace std;

class Vector2D
{
public:
Vector2D()
{

}
Vector2D(int& a, int& b)
:x(a), y(b)
{

}
void Drukuj()
{
cout << "wektor [" << x << ',' << y << "] \n";
}
void Wspolrzedne(int&a, int&b)
{
x = a;
y = b;
}
int* Wspolrzedne()
{
int tab[2] = { x,y };
return tab;
}
void operator = (Vector2D& obj)
{
int* a = obj.Wspolrzedne();
cout << a[0] << "\n";
x = a[0];
cout << x << " what? \n";
y = a[1];
}

private:
int x, y;

};


int main()
{
int x1 = 2, x2 = 3;
Vector2D wektor(x1, x2);
wektor.Drukuj();
Vector2D wektor2;
wektor2 = wektor;
wektor2.Drukuj();
wektor.Drukuj();


return 0;
}

问题是它分配了一些奇怪的值。但是,如果我不使用引用,而是声明 2 个 int 值 (j,k) 并将数组元素分配给它们 [0,1],它就可以正常工作。此外,当使用静态数字(例如,而不是 a[0] ;使用“2”)时,它也能正常工作。
怎么回事?
如果有人能指出我正确的答案/资源,我会很高兴。
问候,

最佳答案

在您的成员函数 int* Wspolrzedne() 中,您返回局部变量 tab 的地址。在变量的生命周期结束后访问此变量,就像您在 = 运算符中所做的那样,是未定义的行为

关于c++ - 重载 "="运算符时无法将数组元素分配给类变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47642547/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com