Вот вывод вашего кода при запуске через clang (для его гораздо более приятных сообщений).
λ > clang++ blah.cxx
blah.cxx:81:27: error: no viable overloaded '='
fn= f_n; ln= l_n; address ="" ;email= emaila;number= num;
~~~~~~~ ^~~
blah.cxx:5:11: note: candidate function (the implicit copy assignment operator) not viable: no known conversion from 'const char [1]' to 'const Address' for 1st argument
Выше указано, что вы не можете сделать это: address = ""
, потому что у вас нетлюбые неявные преобразования из const char*
в Address
объект.
Вы, вероятно, имели в виду this->address = address
, поскольку кажется, что вы хотите присвоить address
, полученный вами в конструкторе?
В качестве примечания, в зависимости от используемого вами компиляторавы можете передать Address address
по ссылке, например Address& address
или const Address& address
(что означает, что вы не будете изменять объект, на который ссылаетесь) в списке аргументов вашей функции.Хотя некоторые компиляторы (если не наиболее широко используемые) будут реализовывать оптимизацию ellision копирования .
Например, ваши аргументы конструктора будут выглядеть так:
contact(string f_n, string l_n, const Address& home,string emaila, string num);
class Address
^
blah.cxx:89:8: error: expected unqualified-id
Address.input();
^
blah.cxx:97:43: error: 'Address' does not refer to a value
cout<<"name: "<<fn<<" "<<ln<<" address "<<Address.output();<<" email: "<<email<<" digits "<<number<<endl;
^
Ваш объект-член называется address
, а не Address
.Вы хотите вызвать address.output()
, в противном случае Address.output()
действительно пытается вызвать static
функцию с именем output
из класса Address
.
blah.cxx:97:60: error: expected expression
cout<<"name: "<<fn<<" "<<ln<<" address "<<Address.output();<<" email: "<<email<<" digits "<<number<<endl;
Та же проблема, что и выше, используйте address.output()
, так как вы вызываете функцию output()
on address
.
blah.cxx:110:8: error: 'Address' does not refer to a value
return Address address;
^
return address;
- это правильный способ вернуть address
объект.return Address address;
- нонсенс.
blah.cxx:113:8: warning: expression result unused [-Wunused-value]
return fn, ln;
^~
1 warning and 5 errors generated.
fn
здесь не используется.Просто предупреждение, но оно указывает на то, что вы либо забыли его использовать, либо он может быть без вреда удален из вашего кода.