Ошибки при компиляции класса комплексных чисел в переполнении стека

У меня есть код, который должен показывать сложение, вычитание и т. Д. Комплексных чисел без необходимости ввода от пользователя. У меня есть три класса: test.cpp, complex.cpp и complex.h для запуска программы, определения конструкторов и методов и создания класса заголовка соответственно. Однако, когда я запускаю свой код, я получаю серию ошибок, которые я пытался выяснить уже некоторое время.

complex.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

complex.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 << ')';
}

test.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. Кто-нибудь может помочь?

0

Решение

Вы можете столкнуться с проблемой с 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"
1

Другие решения

Я думаю, что проблема в вашем 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». Если вы говорите, что функция является константой, это означает, что все значения членов класса не будут изменены при вызове этого метода.

3

#include <complex>
#include "complex.h"

Это плохой запах. Возможно, что оба этих файла #include используют одно и то же имя для защиты заголовка.

Попробуй изменить свою вот так.

#ifndef MY_COMPLEX_H
#define MY_COMPLEX_H

.. И, возможно, переименуйте ваш модуль из «сложного» во что-то другое, чтобы избежать столкновений с одноименным системным заголовочным файлом.

1

Попробуйте сделать это как можно проще. Затем добавляйте детали обратно, пока не найдете свою ошибку.

Это работает?

#include "complex.h"
int main()
{
Complex c(3.0, -1.0);

return 0;
};
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector