• c++ error C2512:没有合适的默认构造函数可用


    这是我最近学习c++过程中遇到的一个问题,同时也说明了自定义类的使用,这里借用别人的例子来说明一下这个问题。

     

    View Code
     1 #include "stdafx.h"
     2 using namespace std;
     3 
     4 /* --- --- --- --- --- --- --- 武器类 --- --- --- --- --- --- */
     5 class Weapon
     6 {
     7 private:
     8     string name;
     9     int power;
    10 public:
    11     void Show();
    12     //Weapon(){};
    13     Weapon(string name,int power);
    14 };
    15 
    16 Weapon::Weapon(string name, int power)
    17 {
    18     this->name = name;
    19     this->power = power;
    20 };
    21 
    22 void Weapon::Show()
    23 {
    24     cout<<"武器名:"<<this->name<<"威力值:"<<this->power<<endl;
    25 };
    26 
    27 
    28 /* --- --- --- --- --- --- --- 角色类 --- --- --- --- --- --- */
    29 
    30 class Actor
    31 {
    32 private:
    33     string name;
    34     bool gender;
    35     Weapon weapon;
    36 public:
    37     Actor(string name, bool gender);
    38     void Say();
    39     void Say(string message);
    40     void SetWeapon(Weapon &weapon)
    41     {
    42         this->weapon = weapon;
    43     }
    44 };
    45 
    46 Actor::Actor(string name, bool gender)
    47 {
    48     this->gender = gender;
    49     this->name = name;
    50 }
    51 
    52 void Actor::Say()
    53 {
    54     cout<<"我乃"<<this->name<<"是也..."<<endl;
    55 };
    56 
    57 void Actor::Say(string message)
    58 {
    59     cout<<this->name<<""<<message<<endl;
    60 };

     

      

    注释掉Weapon的void构造函数会提示error C2512: “Weapon”: 没有合适的默认构造函数可用。

    1、由于你在Weapon中定义了其他构造函数,那么,编译器不会为你创建默认构造函数;然而,你在Actor的构造函数中没有调用Weapon的构造函数,那么,编译器会调用Weapon的默认构造函数,然而,却没有定义,所以,产生了“error C2512: “Weapon”: 没有合适的默认构造函数可用”错误!

  • 相关阅读:
    占位
    提高班整风带给我的思考
    Servlet笔记
    CommandArgument传多个值
    asp.net中怎么判断request的一个值是否为空
    asp.net中cookie中文乱码的解决
    datatable的手工构造过程
    .net c#日期时间函数大全
    【转载】[.net程序员面试题]
    javascript自动生成表格行
  • 原文地址:https://www.cnblogs.com/ITEagle/p/2718012.html
Copyright © 2020-2023  润新知