没有使用class作为java enum的类C ++的构造函数

时间:2017-10-30 17:24:49

标签: c++

我最近开始使用c ++,当我想使用像Java的枚举这样的c ++类时,我遇到了麻烦。 我会有'模拟枚举'类属性,但是当我尝试在构造函数中初始化属性时,我收到以下错误:

  

model :: suite

不存在默认构造函数

我现在将构造函数设为私有,但枚举应该有私有构造函数来阻止构造该类的未定义对象。

¿我该怎么办?

e.g。

suite.h

#include <iostream>
#include <string>
#include <vector>

namespace model
{
    class Suite
    {
        public:
            static const Suite CLUBS;
            static const Suite DIAMONDS;
            static const Suite SPADES;
            static const Suite HEARTS;
            static const int SIZE = 4;

        private:
            std::string name;

            Suite(std::string name)
            {
                this->name = name;
            }

        public:
            std::string toString()
            {
                return name;
            }

            std::vector<Suite> values()
            {
                return {Suite::CLUBS, Suite::DIAMONDS, Suite::SPADES, Suite::HEARTS};
            }
    };
    const Suite Suite::CLUBS = Suite("CLUBS");
    const Suite Suite::DIAMONDS = Suite("DIAMONDS");
    const Suite Suite::SPADES = Suite("SPADES");
    const Suite Suite::HEARTS = Suite("HEARTS");
}

card.h

#pragma once
#include <string>
#include "suite.h"
#include "face.h"

namespace model
{
    class Card
    {
        public:
            Card(int face, int suite);
            Face getFace();
            Suite getSuite();
            bool isMergeable();
            std::string toString();

        private:
            Face face;
            Suite suite;

            bool isRed();
            bool isContigous(Card card);
    };
}

card.cpp

#include <iostream>
#include "card.h"

using namespace std;
using namespace model;

Card::Card(int face, int suite)
{
    this->face = Face::VALUES[face];
}
Face Card::getFace()
{
}
Suite Card::getSuite()
{
}
bool Card::isMergeable()
{
}
std::string Card::toString()
{
}

bool Card::isRed()
{
}
bool Card::isContigous(Card card)
{
}

1 个答案:

答案 0 :(得分:0)

最后我找到了解决方案。

当我们尝试实施“模拟枚举”时在cpp文件中,我们有this->指针以及包含它的范围(范围规则),因此我们需要在构造函数的{ }之前定义对象。

#include <iostream>
#include "card.h"

using namespace std;
using namespace model;

Card::Card(Face face, Suite suite) : face(face), suite(suite)
{

}

通过这种方式,我们可以使用属性和方法实现更强大,更实用的枚举。