有人可以指出为什么我的变量不明,以及为什么我不能重载我的运算符

Sta*_*ovy -1 c++ class operator-overloading

我不经常涉及C++,但我正在学习数据结构,本书使用c ++作为语言.我现在正在设置课程.

我的问题是:

  1. Visual Studio 2012正在咆哮着未知的变量.我在我的标题中声明了变量,所以我不太清楚为什么我遇到了这个问题.

  2. 我正在尝试重载加法和乘法运算符(作为非成员函数),但它仍然试图使用它,好像我只允许有一个参数用于重载.

这是我正在做的一些代码:

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,saldabasile,所有人都花时间帮助我.我真的很感激.C++比Java要多得多.

Ste*_*eve 5

在你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)

重载运算符可能会导致细微的错误.我强烈建议您阅读本页以避免常见的陷阱: 运算符重载