Sta*_*ovy -1 c++ class operator-overloading
我不经常涉及C++,但我正在学习数据结构,本书使用c ++作为语言.我现在正在设置课程.
我的问题是:
Visual Studio 2012正在咆哮着未知的变量.我在我的标题中声明了变量,所以我不太清楚为什么我遇到了这个问题.
我正在尝试重载加法和乘法运算符(作为非成员函数),但它仍然试图使用它,好像我只允许有一个参数用于重载.
这是我正在做的一些代码:
1.未识别的变量
/* Quadratic.h */
#include <iostream>
using namespace std;
class Quadratic
{
public:
// constructors
Quadratic::Quadratic()
// accessors
Quadratic::getA();
Quadratic::getB();
Quadratic::getC();
// mutators
Quadratic::setCoefficients(float coA, float coB, float coC);
private:
float a, b, c, x;
};
Run Code Online (Sandbox Code Playgroud)
Quadratic.cpp:
/* Quadratic.cpp */
#include <iostream>
#include "Quadratic.h"
using namespace std;
class Quadratic
{
// Default constructor
Quadratic::Quadratic()
{
a = 0; // Visual Studio is complaining about a, b, & c
b = 0;
c = 0;
}
/* Mutators */
void Quadratic::setCoefficients(float coA, float coB, float coC)
{
a = coA;
b = coB;
c = coC;
}
/* Accessors */
float Quadratic::getA() const {
return a;
}
float Quadratic::getB() const {
return b;
}
float Quadratic::getC() const {
return c;
}
};
Run Code Online (Sandbox Code Playgroud)
这就是第一个问题.我不太清楚为什么它找不到那些变量.有人可以指出我做错了吗?
2.重载运算符(参数不匹配)
/* Quadratic.h */
/* Overloading Operators */
Quadratic & operator+(const Quadratic & q1, const Quadratic & q2);
Quadratic & operator*(double r, const Quadratic & q);
Run Code Online (Sandbox Code Playgroud)
它只是告诉我,我有太多的参数.我认为它希望做一些类似于q1.operater+(q2)我希望能够做类似事情的事情q3 = q1 + q2
任何指针都可以解决这些小问题.
编辑
编译器错误请求:
error C2804: binary 'operator +' has too many parameters
error C2804: binary 'operator *' has too many parameters
Run Code Online (Sandbox Code Playgroud)
基本上我上面提到的,也许我不清楚它.
编辑2
不确定为什么它被downvoted,但如果你要进行投票,至少说明原因......如果是因为问题是新手?因为问题措辞不力或解释不清,或者仅仅因为你的自负太高了?当他们试图学习新东西时,不需要让某人失望.
除此之外,感谢legend2k,john,steve,salda和basile,所有人都花时间帮助我.我真的很感激.C++比Java要多得多.
在你Quadratic.cpp需要删除的行:
class Quadratic
{
Run Code Online (Sandbox Code Playgroud)
因为这隐藏Quadratic了头文件中的定义.但是,这会隐藏头文件中的错误.在.h文件中,您必须指定方法的返回类型,并且不需要使用方法名称限定Quadratic.要修复运算符重载错误,请确保它们在头文件中的类声明之外声明.
class Quadratic {
//...
// accessors
float getA() const;
float getB() const;
float getC() const;
// mutators
void setCoefficients(float coA, float coB, float coC);
// rest of class definition as in question...
}; // end of class declaration
Quadratic & operator+(const Quadratic & q1, const Quadratic & q2);
Quadratic & operator*(double r, const Quadratic & q);
Run Code Online (Sandbox Code Playgroud)
重载运算符可能会导致细微的错误.我强烈建议您阅读本页以避免常见的陷阱: 运算符重载