这是赋值运算符错误吗
Is this an assignment operator error?
所以我在下面的代码行中遇到了错误。
intVAR = myTYPEvar;
其中intVAR是一个整数,myTYPEvar是我组成的一个类,但应该传递它持有的私有整数的值。我认为下面运算符在.h中的定义是必要的。
public:
int operator=(const myTYPE & INTin);
它在.cpp中定义为
int myTYPE::operator=(const myTYPE &myTYPEin){
return (myTYPEin.getprivateint());
}
它不会编译。我相信我做得不对。我错过了什么?
您需要定义一个能够编写的转换运算符
intVAR = myTYPEvar;
例如
operator int() const { return myTYPEin.getprivateint(); }
请注意,在这种情况下,必须使用限定符const
定义成员函数getprivateint。
至于你的赋值运算符,它只分配表达式的级别,其中使用赋值运算符的类型为int。例如,使用赋值运算符,你可以编写
myTYPE obj1, obj2;
int x = obj1 = obj2;
在这种情况下,obj2的getprivateint()调用的值将被分配给x.
以下是一个演示示例,说明您将如何使用您的任务操作员
#include <iostream>
int main()
{
struct A
{
A( int x ) : x ( x ) {}
int operator = ( const A & a )
{
return a.x;
}
int x;
};
A a1( 10 ), a2( 20 );
int x = a1 = a2;
std::cout << "x = " << x
<< ", a1.x = " << a1.x
<< ", a2.x = " << a2.x << std::endl;
return 0;
}
输出为
x = 20, a1.x = 10, a2.x = 20
然而,你可能不会写例如
x = a1;
您需要如上所示的转换运算符。
或者,如果使用结构A的示例,代码将看起来像
#include <iostream>
int main()
{
struct A
{
A( int x ) : x ( x ) {}
operator int() const { return x; }
int x;
};
A a1( 10 );
int x = a1;
std::cout << "x = " << x
<< ", a1.x = " << a1.x
<< std::endl;
return 0;
}
输出为
x = 10, a1.x = 10
int operator=(const myTYPE & INTin);
这样的赋值运算符只允许将赋值给myTYPE
变量,而不允许从变量中赋值
您正在寻找的可能是一个转换运营商:
operator int() const {
return (myTYPEin.getprivateint());
}
相关文章:
- 重载赋值运算符函数和复制构造函数中的错误
- 错误消息:使用复制构造函数和重载赋值运算符
- 为什么在取消引用的指向接口的指针上使用赋值运算符不是编译器错误
- C++的新增功能:创建 2D 数组并具有正确的赋值运算符:分割错误
- 使用赋值运算符复制两个类中的数组时出现编译器错误
- 可以错误地使用赋值运算符而不是比较运算符的地方,= Vs ==
- 唯一指针中的赋值运算符错误
- { } 构造函数实现中的赋值运算符 => 错误
- 错误:非静态引用成员"std::ostream&Student::out",无法使用默认赋值运算符
- 默认的复制构造函数和复制赋值运算符给出奇怪的错误
- 双向循环列表中的赋值运算符以错误的顺序添加元素
- 错误:非静态引用成员,无法使用默认赋值运算符
- clang-libc++错误:重载解析选择了隐式删除的复制赋值运算符
- 赋值运算符重载 -- 错误 C2440:'==':无法从 'A<T> *' 转换为 'A<T> *const '
- 绕过自动生成的赋值运算符(VS 错误?
- 关于赋值运算符过度加载错误
- 复制构造函数和重载赋值运算符的堆损坏错误
- 这是赋值运算符错误吗
- C++复制构造函数/赋值运算符错误
- Icpc错误隐式生成的赋值运算符无法复制引用成员(boost图)