显示传递给c ++类构造函数的枚举值

时间:2014-03-23 01:16:30

标签: c++ class enums

我编写了一个简短的测试代码,用于将枚举值传递给类构造函数。它适用于编译器。但是,输出很奇怪。 Display()不显示枚举值。它只显示“当前代理人的策略是”。这段代码出了什么问题?谢谢!

#include <iostream>

using namespace std;

class Agent
{
public:
    enum Strat {BuyandHold, Momentum, TA};
    Agent(Strat strategy=BuyandHold);
    ~Agent();
    void Display();
private:
    Strat strategy;
};

Agent::Agent(Strat strategy)
{
    strategy = strategy;
}

Agent::~Agent()
{
    cout << "Bye!" << endl;
}

void Agent::Display()
{
    cout << "The strategy of the current agent is ";
    switch(strategy){
    case BuyandHold : cout << "BuyandHold." << endl; break;
    case Momentum : cout << "Momentum." << endl; break;
    case TA : cout << "TA." << endl; break;
    }
}

int main()
{
    Agent a(Agent::TA);
    a.Display();
    return 0;
}

1 个答案:

答案 0 :(得分:0)

您需要区分本地参数名称声明和类成员。只需为初始化参数提供不同的名称:

Agent::Agent(Strat strategy_)
: strategy(strategy_) {}

我更喜欢_后缀来标记类成员变量或参数名称,因为这两种方式都是标准兼容的(使用诸如_前缀不会,以及其他任何内容,例如{类成员变量的{1}}前缀是笨拙的恕我直言。

另请注意:
我一直在使用成员初始化列表来分配类成员变量,这是大多数用例的正确选择。