error C2512: “Name”: 没有合适的默认构造函数可用
1 #include <iostream> 2 #include <string> 3 #include <cmath> 4 using namespace std; 5 6 class Name 7 { 8 public: 9 Name (char *fst,char * last ); 10 //Name (){}; 11 string GetName() const ; 12 void setName (const string &fst,const string &last); 13 const string &getFirstName()const {return firstName;} 14 const string &getLastName()const {return lastName;} 15 void print() const ; 16 17 protected: 18 string firstName; //字符串本身是以字符数组的形式存储的; 19 string lastName; 20 }; 21 Name::Name(char *fst,char * last ):firstName(fst),lastName(last) 22 { 23 } 24 string Name::GetName()const 25 { 26 return (firstName+lastName); 27 } 28 29 void Name::setName(const string &fst,const string &last) 30 { 31 firstName =fst; 32 lastName =last; 33 } 34 35 void Name::print()const 36 { 37 cout << firstName <<" "<<lastName<<endl; 38 } 39 40 class Person 41 { 42 public : 43 Person (const Name &n, char *paddr,char *pcity,char *pprov,char *zip); 44 void setName(const Name &n); 45 void print() const ; 46 protected: 47 Name name; 48 string addr; 49 string city; 50 string prov; 51 string ZIP; 52 }; 53 54 Person::Person(const Name& n, char *paddr,char *pcity,char *pprov,char *zip) 55 { 56 name =n; 57 addr =paddr; 58 city =pcity; 59 prov =pprov; 60 ZIP =zip; 61 } 62 void Person ::setName(const Name &n) 63 { 64 name.setName(n.getFirstName(),n.getLastName()); 65 } 66 void Person::print()const 67 { 68 cout << name.GetName()<<" "<<addr<<" "<<city<<" "<<prov<<" "<<ZIP<<" "<<endl; 69 } 70 int main () 71 { 72 Person p(Name ("周","路"),"交大东路1号","大连","辽宁","116026"); 73 cout <<"修改名字前:"<<endl; 74 p.print(); 75 76 cout <<"修改名字后:"<<endl; 77 Name n("周","炉"); 78 p.setName(n); 79 p.print(); 80 return 0; 81 }
1.去掉代码,出现了如上所示错误:
Name (){};
key:由于你在Name中定义了其他构造函数,那么,编译器不会为你创建默认构造函数;然而,你在Person的构造函数中没有调用Name的构造函数,那么,编译器会调用Name的默认构造函数,然而,却没有定义,所以,产生了“error C2512: “Name”: 没有合适的默认构造函数可用”错误!
2.#include<string>和#include<cstring>的问题
e:ccode est_name est_name est.cpp(26): error C2676: 二进制“+”:“const std::string”不定义该运算符或到预定义运算符可接收的类型的转换 e:ccode est_name est_name est.cpp(37): error C2679: 二进制“<<”: 没有找到接受“const std::string”类型的右操作数的运算符(或没有可接受的转换)
当为#include<cstring>出现如上两条错误提示;
key:string和CString均是字符串模板类,string为标准模板类(STL)定义的字符串类,已经纳入C++标准之中; CString(typedef CStringT > CString)为Visual C++中最常用的字符串类,前者是C++中的标准string类,拥有强大的字符串操作,后者只是C里面的一个库,功能较弱。STL是标准类模板库,里面有很多的类,如:vector、map等等。都是一些方便编程的好东西。