我编写了一个简短的测试代码,用于将枚举值传递给类构造函数。它与编译器一起工作得很好。但是,输出很奇怪。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;
}
您需要将局部参数名称声明与类成员区分开来。只需为初始化参数提供一个不同的名称:
Agent::Agent(Strat strategy_)
: strategy(strategy_) {}
我更喜欢_
后缀来标记类成员变量或参数名,因为这两种方式都是标准兼容的(使用_
前缀不会,而其他任何像m_
前缀的类成员变量都是笨拙的IMHO)。
也注意:
我一直在使用成员初始化列表来分配类成员变量,这是大多数用例的正确选择。