0

我的代码应该显示复数的加法、减法等,而无需用户输入。我有三个类:test.cpp、complex.cpp 和 complex.h 来运行程序,定义构造函数和方法,并分别创建一个头类。然而,当我运行我的代码时,我得到了一系列我一直试图弄清楚的错误。

复杂的.h

//complex class definition
#ifndef COMPLEX_H
#define COMPLEX_H


//class complex
class Complex
{
public:
    Complex(); //default no arg constructor
    Complex(double a); //one arg constructor
    Complex(double a, double b); //two arg constructor
    Complex operator+(const Complex &) const; //addition method
    Complex operator-(const Complex &) const; //subtraction method
    Complex operator*(const Complex &) const; //multiplication method
    Complex operator/(const Complex &) const; //division method
    void print() const; //output
private:
    double a; //real number
    double b; //imaginary number
}; //end class Complex

#endif

复杂的.cpp

#include "stdafx.h"
#include <iostream>
#include "complex.h"
using namespace std;

//no arg constructor
Complex::Complex()
{
    a = 0;
    b = 0;
}

//one arg instructor
Complex::Complex(double real)
{
    a = real;
    b = 0;
}

//two arg constructor
Complex::Complex(double real, double imaginary)
{
    a = real;
    b = imaginary;
}

//addition
Complex Complex::operator+(const Complex &number2) const
{
    return a + number2.a, b + number2.b;
}

//subtraction
Complex Complex::operator-(const Complex &number2) const
{
    return a - number2.a, b - number2.b;
}

//multiplication
Complex Complex::operator*(const Complex &number2) const
{
    return a * number2.a, b * number2.b;
}

//division
Complex Complex::operator/(const Complex &number2) const
{
    return a / number2.a, b / number2.b;
}

//output display for complex number
void Complex::print() const
{
    cout << '(' << a << ", " << b << ')';
}

测试.cpp

#include <iostream>
#include <complex>
#include "complex.h"
#include "stdafx.h"
using namespace std;

int main()
{
    Complex b(1.0, 0.0);
    Complex c(3.0, -1.0);

    /*cout << "a: ";
    a.print();

    system ("PAUSE");*/

};

现在在测试中,因为代码显示下部已被注释掉,我试图只调用三个构造函数中的两个,看看我是否能让其中任何一个工作。

我收到的错误:

    error C2065: 'Complex' : undeclared identifier
    error C2065: 'Complex' : undeclared identifier
    error C2146: syntax error : missing ';' before identifier 'b'
    error C2146: syntax error : missing ';' before identifier 'c'
    error C3861: 'b': identifier not found  
    error C3861: 'c': identifier not found

我正在尝试在 Visual Studio 2010 中运行它。有人可以帮忙吗?

4

4 回答 4

3

我认为问题出在您的 Complex.cpp 中。如果编译类的代码有错误,则该类是未知的,因此标识符 Complex 也是如此。

快速查看后,一切似乎都是正确的,但您的操作员功能有一些错误:

不正确:

    //addition
    Complex Complex::operator+(const Complex &number2) const
    {
        return a + number2.a, b + number2.b;
    }

正确的:

    //addition
    Complex Complex::operator+(const Complex &number2) const
    {          
        return Complex(a + number2.a, b + number2.b);
    }

问题是您的运算符方法的返回类型。它们必须与声明的相同。您也不能同时返回两个变量。如果你想这样做,你必须使用结构或类(通过使用新值调用你的类 Complex 的构造函数)。

如果要操作成员 a 和 b,则不能将方法定义为“const”。如果你说一个函数是 const,这意味着所有类成员的值都不会通过调用这个方法来操作。

于 2012-11-13T10:19:44.327 回答
1

您可能会遇到 stdafx.h 问题

至少您应该尝试#include "stdafx.h在所有其他包含之前放置或者您可以尝试将您的项目属性设置为不使用 stdafx.h

1. right click on project and select Properties
2. go to C/C++ -> Precompiled Headers 
3. select "Not Using Precompiled Headers"
于 2012-11-13T09:07:53.727 回答
1
#include <complex>
#include "complex.h"

那是难闻的气味。这两个#include 文件可能对标头保护使用相同的名称。

试着像这样改变你的。

#ifndef MY_COMPLEX_H
#define MY_COMPLEX_H

.. 并且可能将您的模块从“复杂”重命名为其他名称,以避免与同名的系统头文件发生冲突。

于 2012-11-13T10:35:58.590 回答
0

尝试使其尽可能简单。然后重新添加零件,直到找到错误为止。

这行得通吗?

#include "complex.h"

int main()
{
    Complex c(3.0, -1.0);

    return 0;
};
于 2012-11-13T09:45:09.440 回答