扑克牌card类
class card
{
//Attribuites
private:
enum CardColors{ heart=0,club=100,diamond=200,spade=300,MasterJoker=400,SlaveJoker=500}
m_CardColor; //enum牌花型
enum CardPoint{TWO=2,THREE,FOUR,FIVE,SIX,SEVEN,EIGHT,NINE,TEN,J,Q,K,A}
m_CardPoint; //enum牌点数
CPoint m_CardPos; //坐标
bool m_bIsShown; //是否显示
bool m_bIsFront; //是否是正面图//Constructions
public:
card(CardColors cardcolor,CardPoint point ,CPoint& pt,bool Front=true, bool Shown= false);
card(CardColors cardcolor,CardPoint point ,int leftX=0,int topY=0 , bool Front=true, bool Shown= false);
//Operations
public:
int GetPoint()const ; //获得牌的点数
int GetCardColor()const; //获得牌的花色 CPoint  GetPostition() const;     //获得card左上角点位置
int GetLeftX() const ;
int GetTopY() const ;
void SetPostition(const CPoint& pt);     //设置card位置
void SetPostition(const int& LeftX,const int& TopY);

void SetSelected(bool SelectedState); //设置card选中状态属性
bool GetSelectedState()const; //获得选择状态属性

void ShowCardFront(CDC* pDC); //显示card正面
void ShowCardFront(CDC* pDC,const CPoint& pt);
void ShowCardFront(CDC* pDC,const int& LeftX,const int& TopY);
void ShowCardBack(CDC* pDC); //显示card背面
void ShowCardBack(CDC* pDC,const CPoint& pt);
void ShowCardBack(CDC* pDC,const int& LeftX,const int& TopY); bool GetShownState() const; //获得显示状态

bool GetFrontState()const ; //获得crad处于正反的状态//Destruction
public:
~card(void);};.cpp
void card::ShowCardFront(CDC* pDC) //显示card正面
{
int bmWidth=71,bmHeight=96;
CBitmap bmp;
CBitmap* pOldbmp;
CDC memDC; bmp.LoadBitmapW(m_CardColor+m_CardPoint);
memDC.CreateCompatibleDC(pDC);
pOldbmp=memDC.SelectObject(&bmp);
memDC.BitBlt(0,0,bmWidth,bmHeight,&memDC,0,0,SRCCOPY);
pDC->BitBlt(m_CardPos.x,m_CardPos.y,bmWidth,bmHeight,&memDC,0,0,SRCCOPY);
bmp.DeleteObject(); m_bIsFront=true;
}将他的ID  改成入  heart10 表示红桃10 
然后定义资源文件
#define heart2                          002
#define heart3                          003
#define heart4                          004
#define heart5                          005
#define heart6                          006
#define heart7                          007
#define heart8                          008
#define heart9                          009
#define heart10                         010
#define heartJ                          011
#define heartQ                          012
#define heartK                          013
#define heartA                          014010就代表heart10  就等于0+10 。。
bmp.LoadBitmapW(m_CardColor+m_CardPoint);来加载并显示他这样子出现了下面两个错误1>CVTRES : fatal error CVT1100: duplicate resource.  type:BITMAP, name:112, language:0x0804
1>LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt请问:这样的连接位图方式可行吗。。
这个错误该怎么解决呢。。
高手请帮忙~

解决方案 »

  1.   

    #define heart2                          2 
    #define heart3                          3 
    #define heart4                          4 
    ...
      

  2.   

    fatal error CVT1100
    给定资源被指定一次以上。
    检查 type:BITMAP, name:112, language:0x0804 资源是否有重复定义的。
      

  3.   

    vc在编绎的时候会自动分配一些资源号给各个lib文件
    他们和你分配的资源有冲突
    建议尽量把自定义的资源id设的大一些,
    比如花色从1000开始,
    1010就代表heart10  就等于1000+10
      

  4.   

    我在card。h里定义
    public:
    enum类型变量
    在另一个头文件
    定义对象
    card m_card(heart,TEN);表示红桃10,
    他报错说identifier 'heart'error C2061: syntax error : identifier 'diamond'
    1>80percentDlg.cppcard(CardColors cardcolor,CardPoint point ,CPoint& pt,bool Front=true, bool Shown= false);?
    这个是怎么回事
      

  5.   

    因为你的枚举是放在class card里面如果你要在类的外部引用CardColors枚举常量
    必须包含类前缀card::heart,card::diamond
      

  6.   


    谢谢
    public:
    card card1(card::heart,card::TEN);\80percentdlg.h(33) : error C2061: syntax error : identifier 'heart'里面加card.h了。。
    为什么还是不行呢。
    class  card
    {
    public:
    enum CardPoint{TWO=2,THREE,FOUR,FIVE,SIX,SEVEN,EIGHT,NINE,TEN,J,Q,K,A};
    enum CardColors{ heart=1000,club=2000,diamond=3000,spade=4000,MasterJoker=5000,SlaveJoker=6000,cardBack=7000};
    private:
    CardColors m_CardColor; //enum牌花型
    CardPoint m_CardPoint; //enum牌点数
      

  7.   

    card::CardColors::heart
    这样引用
      

  8.   

    card::CardColors::heart
    这样引用
      

  9.   


    card card1(card::CardColors::heart ,card::CardPoint::TEN); warning C4482: nonstandard extension used: enum 'card::CardColors' used in qualified name
     error C2061: syntax error : identifier 'heart'
    1>80percentDlg.cpp
     warning C4482: nonstandard extension used: enum 'card::CardColors' used in qualified name
    identifier 'heart'这样的错误
      

  10.   

    对不起,说错了
    class  card 

    public: 
    static enum CardPoint{TWO=2,THREE,FOUR,FIVE,SIX,SEVEN,EIGHT,NINE,TEN,J,Q,K,A}; 
    static enum CardColors{ heart=1000,club=2000,diamond=3000,spade=4000,MasterJoker=5000,SlaveJoker=6000,cardBack=7000}; 
    这样试试
      

  11.   


    你的card1是另外一个类C80percentDlg的成员变量
    但语法上不能这样调用它的构造函数,必须在C80percentDlg的构造函数里构造它应该这样
    public:
        card card1;    // 构造参数不在这里填写
    C80percentDlg::C80percentDlg(...)
        : CDialog(..)
        , card1(card::heart,card::TEN) // 在这里调用构造函数
    {
    ...
    }象你上边的定义,编译器会以为你定义的是一个返回值为card的函数card1了,所以提示语法错误了
      

  12.   

    哦~~谢谢vocanicy 1.这样看上去好像C80percentDlg继承了card类?2.假如我要定义和显示54张扑克牌那不是要写很长。有没有更好的构造方法
    比如我给定义
    card m_card[54];并且在构造的时候都初始化。怎样做好呢?3.如果我把他放在Dlg的构造函数里,构造的话会出现
    'card' : no appropriate default constructor available
      

  13.   

    static  嗯。。
    定义为static还好点。。直接card::heart更方便谢谢了