首页 > 代码库 > error C2512: “Name”: 没有合适的默认构造函数可用

error C2512: “Name”: 没有合适的默认构造函数可用

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()const25 {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()const36 {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()const67 {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\test_name\test_name\test.cpp(26): error C2676: 二进制“+”:“const std::string”不定义该运算符或到预定义运算符可接收的类型的转换e:\ccode\test_name\test_name\test.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等等。都是一些方便编程的好东西。

error C2512: “Name”: 没有合适的默认构造函数可用