超载运营商=?C++

new*_*ger 0 c++ operator-overloading char

我在尝试将我创建的类中的对象插入到char时遇到了麻烦.我创建一个类名称Element作为更大程序的一部分,但是当我尝试重载operator =以便我可以在char变量中获取我在Element obj中获得的char没有任何工作...

element.h展开

class Element {

private:
    char val;
public:
    Element();
    Element(char newVal); //check input - throw execption
    ~Element();

friend ostream& operator<<(ostream& os, const Element& obj);
void setElement(char newVal);
char getElement();

void operator= (const Element newVal);
void operator= (char newVal);


};
Run Code Online (Sandbox Code Playgroud)

Element.cpp

#include "Element.h"



Element::Element()
{
    val ='.';
}

Element::Element(char newVal)
{
    if (newVal!='X' && newVal!='O'&& newVal!='.'){
        inputExecption error;
        error.what();
    } else{
        val=newVal;
    }
}

Element::~Element()
{

}

void Element::setElement(char newVal)
{
    if (newVal!='X' && newVal!='O'&& newVal!='.'){
        inputExecption error;
        error.what();
    } else{
        val=newVal;
    }
}

char Element::getElement()
{
    return val;
}

ostream& operator<<(ostream& os, const Element& obj)
{

    return os << obj.val;

}

void Element::operator= (const Element Value){
    val = Value.val;
}

void Element::operator= (char newVal){
    if(val != 'X' && val != 'O'){
        inputExecption a;
        a.what();
    }
    val = newVal;
}
Run Code Online (Sandbox Code Playgroud)


正如我所说,我要做的是:

Element x='X';
char c = x; //(c=x.val)
cout<<c<<endl;//Will print X
Run Code Online (Sandbox Code Playgroud)

谢谢!:)

0x4*_*2D2 5

换句话说,您正在尝试将类型Element的对象转换为类型的对象char.您可以使用转换运算符:

class Element {
  // ...
  operator char() const { return val; }
};
Run Code Online (Sandbox Code Playgroud)

赋值运算符仅在赋值Element的左侧使用实例时才有效.