2013-08-22 103 views
1

好吧,即时通讯有这个问题涉及两个类。错误C2512没有适当的默认构造函数可用

Dice.h:

#pragma once 

#include <random> 

using std::random_device; 
using std::uniform_int_distribution; 

class Dice 
{ 
public: 
    Dice(int Sides); 
    int roll(void); 

protected: 
    int nSides; 
    random_device generator; 
    uniform_int_distribution<int> distribution; 
}; 

Dice.cpp:

#include "Dice.h" 



Dice::Dice(int Sides) 
{ 
    nSides=Sides; 
} 



int Dice::roll(void) 
{ 
    random_device generator; 
    uniform_int_distribution<int> distribution(1,nSides); 

    return distribution(generator); 
} 

DmgCalc.h: 

#pragma once 

#include "CharSheet.h" 
#include "Dice.h" 
class DmgCalc 
{ 
public: 
    DmgCalc(CharSheet P1, CharSheet P2); 

    bool Dodge(); 

    int Attack(); 

    int Roll(); 
protected: 

    int nP1Con, nP1Str, nP1Dex; 
    int nP2Con, nP2Dex, nP2Hlth; 

    Dice d6; 
}; 

DmgCalc.cpp:

#include "DmgCalc.h" 


DmgCalc::DmgCalc(CharSheet P1, CharSheet P2) 
{ 
    nP1Str=P1.getStr(); 
    nP1Dex=P1.getDex(); 

    nP2Con=P2.getCon(); 
    nP2Dex=P2.getDex(); 
    nP2Hlth=P2.getHlth(); 

    Dice d6(6); 
} 


bool DmgCalc::Dodge() 
{ 
    return ((nP1Dex + d6.roll())-(nP2Dex + d6.roll()) > 0); 
} 

int DmgCalc::Attack() 
{ 
    nP2Hlth-=((nP1Str + d6.roll())-(nP2Con)); 

    return nP2Hlth; 
} 

int DmgCalc::Roll() 
{ 
    return d6.roll(); 
} 

每当我试图编译我得到这个错误:

Error 2 error C2512: 'Dice' : no appropriate default constructor available 

如果我为Dice创建另一个格式为void Dice(void);的构造函数,它工作得很好。

任何帮助,将不胜感激

+0

我没有看到任何东西在这里试图使用它,但我确实在构造函数中看到一个应该是数据成员的局部变量。 – chris

+0

打开警告! –

+1

这不是问题,但数据成员通常是“私人”,而不是“受保护”。 –

回答

6

您需要初始化Dice成员在构造函数的初始化器列表在这里不会被初始化

DmgCalc::DmgCalc(CharSheet P1, CharSheet P2) 
    : d6(20) 
{ 

的东西都会有人称它的默认构造函数。 Dice没有默认构造函数,因此编译器错误。

+0

就是这样,谢谢 –

相关问题