2017-02-11 3 views
-3
class Complex 
{ 
public: 
    Complex(float = 0.0, float = 0.0); //default constructor that uses default arg. in case no init. are in main 
    void getComplex(); //get real and imaginary numbers from keyboard 
    void sum(Complex, Complex); //method to add two complex numbers together 
    void diff(Complex, Complex); //method to find the difference of two complex numbers 
    void prod(Complex, Complex); //method to find the product of two complex numbers 
    void square(Complex, Complex); //method to change each complex number to its square 
    void printComplex(); //print sum, diff, prod, square and "a+bi" form 

private: 
    float real; //float data member for real number (to be entered in by user) 
    float imaginary; //float data member for imaginary number (to be entered in by user) 
}; 

void Complex::getComplex() 
{ 
    cout << "Enter real number: "; 
    cin >> real; 
    cout << "Enter imaginary number: "; 
    cin >> imaginary; 
} 

void Complex::sum(Complex, Complex) 
{ 
    float sum = 0.0; 
    sum = real + imaginary; 
} 

int main() 
{ 
    Complex c; 
    c.getComplex(); 
    c.sum(Complex, Complex); 
    c.diff(Complex, Complex); 
    c.prod(Complex, Complex); 
    c.square(Complex, Complex); 
    c.printComplex(); 

    return 0; 
} 

Я получаю сообщение об ошибке при c.sum(Complex, Complex); внутри основной (наряду с c.diff, c.prod и c.square линий). Ошибка:имя Тип не допускается, (нельзя использовать перегрузку)

type name Complex is not allowed и too few arguments in function call

Я не разрешается использовать перегружать операторы вообще для выполнения этой задачи. Что мне делать, чтобы разрешить это? Код сокращен, чтобы показывать соответствующие части. Еще раз спасибо.

+3

Купите [вводную книгу] (http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list) на C++. Перестаньте задавать такие основные вопросы. Кажется, вы не хотите прикладывать усилия, чтобы ПРОЧИТАТЬ книгу сначала, вместо этого вы хотите изучить C++, задав здесь вопросы. Это не то, как люди учатся. Вы задаете вопросы, когда у вас есть сомнения, прилагая усилия для чтения книг и статей. – Nawaz

+0

'c.sum (Complex, Complex);' => 'c.sum (c, c);' Не имеет смысла, но должно исправить сообщение об ошибке. –

+0

Прости, что обидел тебя @ Наваз. – Mang0Marquez

ответ

0

Успение: методы класса, diff и т. Д. Вашего класса не должны возвращать какой-либо результат или изменять экземпляры классов, которые им переданы, а отображают результат операции только через std :: cout.

Пожалуйста читать по крайней мере http://www.cplusplus.com/doc/tutorial/functions/ для того, чтобы понять, каким образом значения передаются функции (или в данном случае методах см http://www.cplusplus.com/doc/tutorial/classes/)

В то время как вы можете объявить это метод только записи типов аргументы, вы должны указать идентификаторы в определении: `

void Complex::sum(Complex c1, Complex c2) 
{ 

} 

Затем вы можете получить доступ к членам c1 и c2, как c1.imaginary Более эффективным способом передачи c1 и c2 будет использование «ссылок на константы» const Complex& c1. Тогда копия объектов не будет сделана.

На самом деле методы sum, diff, prod могут быть сделаны статическими методами, так как они не влияют на объект Complex c, который они вызываются в основном (следуя моему предположению). Так оно и должно быть, а

Complex::sum(c1, c2); 

Если мое предположение неверно, и c.sum() будет на самом деле имеет влияние на с, я не понимаю, почему вам нужны два аргумента для метода. Вы можете просто добавить c1 в c. Однако затем метод следует называть Add. Или вам нужно вернуть сумму как новый объект, но метод был объявлен недействительным.

Смежные вопросы