首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的操作符重载不会在int main中返回?

我的操作符重载不会在int main中返回?
EN

Stack Overflow用户
提问于 2019-12-19 09:57:44
回答 1查看 66关注 0票数 0

我正在尝试编写一段代码,将2个八进制数相加,然后使用运算符重载将和转换为小数。然而,每当我尝试使用我的转换操作符($)时,我得到"$num1没有在这个作用域中声明“。有谁可以帮我?

注意:我知道为了简单起见,有些东西是可以改变的,但它必须这样做,因为这是我的老师想要的方式。我的主要问题是在main中调用运算符。谢谢!

代码语言:javascript
复制
#include <iostream>
#include <math.h>
#include <algorithm>//reverse
#include <vector>

using namespace std;

int gnum=0;

class Oct{
private:
    int number;//Base 10
    vector <int> octnum;//separated out number
public:
    Oct();
    void input();//input 457
    void setNum(int);//sending setNum a base 10 number(457)
    void operator+ (Oct);//if(sum>7)sum-8
    int operator$ ();//converts sum to base 10
    void display();
    vector <int> octSum;//vector of added numbers
};

Oct::Oct()
{
    number = 0;
    octnum.push_back(0);
}

void Oct::input()
{
    cout<<"Enter your number: ";
    cin>>number;
    gnum = number;
}

void Oct::setNum(int num)
{
    while(num!=0)
    {
        octnum.push_back(num%10);
        num=num/10;
    }
    octnum.push_back(0);
    if(octnum[0]==0)
    {
        octnum.erase(octnum.begin());
    }
}

void Oct::display()
{
    for(int i = 0;i<octSum.size();i++)
    {
        cout<<octSum[i];
    }
    cout<<endl;
}

void Oct::operator+ (Oct num2)
{
    int carry = 0;
    int add = 0;
    for(int i = 0;i<octnum.size();i++)
    {
        add = octnum[i]+num2.octnum[i]+carry;

        if(add>7)
        {
            add=add-8;
            carry = 1;
        }
        else
        {
            carry = 0;
        }
        octSum.push_back(add);
    }
}

int Oct::operator$ ()
{
    for(int i = 0;i<octSum.size();i++)
    {
        octSum[i]=octSum[i]*int(pow(8,i)+0.5);
    }
    reverse(octSum.begin(),octSum.end());
    int sum = 0;
    for(int i = 0;i<octSum.size();i++)
    {
        sum = sum + octSum[i]*int(pow(10,octSum.size()-1-i)+0.5);
    }
    return sum;
}

int main()
{
    Oct num1,num2;
    num1.input();
    num1.setNum(gnum);
    num2.input();
    num2.setNum(gnum);
    num1+num2;
    int j = $num1;
    num1.display();
    return(0);
}
EN

回答 1

Stack Overflow用户

发布于 2019-12-19 10:04:58

$不是C++中的运算符。它只是一个字符,没有任何特定的含义。在源代码中是否支持它作为物理字符是由实现定义的,它是否将被解析为标识符的一部分也是由实现定义的。如果它被解析为标识符的一部分,它将成为令牌的一部分,就像字符az一样。

显然,你的编译器支持$作为源文件字符和标识符中的字符,因此你没有重载操作符,你正在定义一个名为operator$的普通成员函数,并且你在main中引用了一个事先没有声明的标识符$num1

你不能发明新的运算符。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59402369

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档