求助,一个关于类找不到构造函数的问题



  • 很高兴看到咱们的论坛发展壮大,好久没上,又好多了问题。

    我自己构造了两个类,一个卡牌类,有点数和花色,头文件如下:
    #ifndef CARD_H
    #define CARD_H

    class card
    {
    public:
    int point;
    int color;
    card(int p,int c);
    };

    #endif // CARD_H

    cpp文件只定义了个类构造函数,如下:
    #include "card.h"
    #include "cards.h"

    card::card(int p,int c)
    {
    point=p;
    color=c;
    }

    又定义了一副牌的类,共有三张牌,cards,头文件如下:
    #ifndef CARDS_H
    #define CARDS_H
    #include "card.h"

    class cards
    {
    public:
    card card1;
    card card2;
    card card3;
    cards(card c1,card c2,card c3);
    };

    #endif // CARDS_H

    cpp文件也只有一个构造函数,
    #include "card.h"
    #include "cards.h"

    cards::cards(card c1,card c2,card c3)
    {
    card1=c1;
    card2=c2;
    card3=c3;
    }

    运行的时候,错误如下:
    0_1462717124163_QQ截图20160508221754.png



  • 原因在于:你在定义card1,card2,card3这三个变量的时候,并没有提供初始化式,实际上调用的是card:card()这种形式的构造函数(默认构造函数)。在card类里面,你只定义了一个card(int p,int c)形式的构造函数,却没有定义默认构造函数。并且,如果在一个类中,定义了任意一个构造函数,编译器就不再产生默认构造函数。



  • 自己看了书,好像解决了,只要在card类里边加一个构造函数就行了,相当于重载了构造函数,在头文件和函数体里边都加一个:card(){}就行了。


Log in to reply
 

走马观花

最近的回复

  • 萌梦 男孩,女孩,和蛋

    menghome.png

    read more
  • 设计模式-工厂模式

    使用qt/qml来演示设计模式效果,便于学习理解

    1)定义创建对象的接口,封装对象的创建
    2)使具体化类的工作延迟到工厂子类中

    bg.png
    image.png

    1. 工厂类

    createProduct使用了参数来选择要创建哪个产品

    #ifndef FACTORY_H #define FACTORY_H #include <QObject> class Product; class QString; class Factory: public QObject { Q_OBJECT public: virtual ~Factory() = 0; virtual Product* createProduct(QString type) = 0; protected: Factory(); }; class ConcreteFactory: public Factory { Q_OBJECT public: ~ConcreteFactory(); ConcreteFactory(); public slots: Product* createProduct(QString type); }; #endif // FACTORY_H #include "factory.h" #include "product.h" #include <QtQml/qqml.h> Factory::~Factory() { } Factory::Factory() { qmlRegisterType<Product>("Product", 1, 0, "Product"); } ConcreteFactory::~ConcreteFactory() { } ConcreteFactory::ConcreteFactory() { } Product *ConcreteFactory::createProduct(QString type) { if(type == "boy") return static_cast<Product *>(new ConcreteProduct1()); else if(type == "girl") return static_cast<Product *>(new ConcreteProduct2()); return static_cast<Product *>(new ConcreteProduct1()); } 2 产品类

    一个产品是萌梦男,一个产品是萌梦女

    #ifndef PRODUCT_H #define PRODUCT_H #include <QObject> class Product: public QObject { Q_OBJECT public: virtual ~Product() = 0; Q_PROPERTY(QString icon READ icon NOTIFY iconChanged) QString m_icon; QString icon() const { return m_icon; } signals: void iconChanged(QString icon); protected: Product(); signals: public slots: }; class ConcreteProduct1: public Product { Q_OBJECT public: ~ConcreteProduct1(); ConcreteProduct1(); }; class ConcreteProduct2: public Product { Q_OBJECT public: ~ConcreteProduct2(); ConcreteProduct2(); }; #endif // PRODUCT_H #include "product.h" Product::~Product() { } Product::Product() { } ConcreteProduct1::~ConcreteProduct1() { } ConcreteProduct1::ConcreteProduct1() { m_icon = "qrc:/images/boy.png"; } ConcreteProduct2::~ConcreteProduct2() { } ConcreteProduct2::ConcreteProduct2() { m_icon = "qrc:/images/girl.png"; } 3. main.qml

    使用timer,canvas,listview等实现一个自动化生产的动画效果

    源代码

    Fork me on Gitee

    read more
  • blender建模 章鱼
    捕获2.PNG 😵

    read more

关注我们

微博
QQ群