2015-09-22 3 views
0

Недавно я столкнулся с проблемой, когда я не могу передавать значения, введенные пользователем в переменных в качестве аргументов конструктору. Мой код выглядит следующим образом:Передача пользовательских входов в качестве аргументов конструктору

class Complex_no{ 
int real; 
int imaginary; 
Complex_no *ptr; 
float mag; 
public: 
    Complex_no(int a, int b){ 
     real=a; 
     imaginary=b; 
    } 
    Complex_no(){ 
     real=0; 
     imaginary=0; 
    } 

Сейчас в основном у меня есть код что-то вроде этого:

Complex_no c; 
c.Complex_no (a,c); 

где является & с являются переменные используются для хранения пользовательских input.The проблема заключается в том, что компилятор показывает ошибку о том, что

invalid use of ‘Complex_no::Complex_no’ c.Complex_no(r,i); 
+0

Если вы хотите вызвать конструктор с аргументами, просто используйте 'Complex_no c (a, b);'. Если вы хотите настроить его после создателя, вам нужно создать функцию для вызова (не конструктора). – wendelbsilva

+1

Я не вижу вопроса. –

+0

Вы не можете вызвать конструкторы, как обычные функции. – antonio

ответ

3
Complex_no c; 

по умолчанию построения c. Затем вы пытаетесь вызвать конструктор параметров 2 из Complex_no, который является незаконным, поскольку объекты проходят только одну конструкцию и одно разрушение. Вам просто нужно избавиться от Complex_no c; и просто использовать Complex_no c(a, c); для построения c.

Вы также можете использовать новое авто соглашения об именах и имеете

auto c = Complex_no(a, c); 
0

Сообщение об ошибке дает подсказку о том, что, как вы вызываете конструктор не права. Конструкторы вызывается, когда переменная определена или используется «новое» ключевое слово. Объявление в области функций является определяющим объявлением, поэтому тогда вызывается конструктор. Поскольку ваш пример не имеет параметров в точке определения, вызывается конструктор по умолчанию (параметр-меньше). Вместо этого вы должны использовать следующее.

Complex_no c(a,b); 

Кстати, вы также пытается передать «с» как INT, который может быть опечатка в вашем вопросе.