gpt4 book ai didi

c++ - 我的运算符重载没有在我的 int main 中返回?

转载 作者:行者123 更新时间:2023-11-28 08:34:58 25 4
gpt4 key购买 nike

我正在尝试制作一个代码,将 2 个八进制数字相加,然后使用运算符重载将总和转换为十进制。但是,每当我尝试使用转换运算符 ($) 时,我都会得到“$num1 未在此范围内声明”。谁能帮帮我?

注意:我知道为了简单起见可以更改某些内容,但必须这样,因为那是我的老师想要的方式。我的主要问题是主要调用运算符(operator)。谢谢!

#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);
}

最佳答案

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

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

您无法发明新的运算符。

关于c++ - 我的运算符重载没有在我的 int main 中返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59402369/

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