zoukankan      html  css  js  c++  java
  • 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()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等等。都是一些方便编程的好东西。

  • 相关阅读:
    HashMap和Hashtable的区别
    java倒计时三种简单实现方式
    AngularJS---基本操作
    AngularJS---认识AngularJS
    Java线程面试题
    JAVA中高访问量高并发的问题怎么解决?
    Java高并发,如何解决,什么方式解决
    Map总结
    Github
    反射
  • 原文地址:https://www.cnblogs.com/lwflourish/p/4098082.html
Copyright © 2011-2022 走看看