error C2512: “Name”: 没有合适的默认构造函数可用
1 #include2 #include 3 #include 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 <<" "< <
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等等。都是一些方便编程的好东西。