为什么我的简单c ++代码不能编译?我得到未申报的标识符?

时间:2012-02-03 13:55:50

标签: c++

为什么我的简单c ++代码不能编译?得到未声明的标识符错误。

我看不出问题

非常感谢

int _tmain(int argc, _TCHAR* argv[])
{
    StateMachine<States,Triggers> sm;

    return 0;
}

enum States
{
    New,
    Complete
};

enum Triggers
{
    CreateNew,
    MoveToComplete
};

template <class TState, class TTrigger> class StateMachine
{
public:
    StateMachine();

};

3 个答案:

答案 0 :(得分:3)

要么向前声明要么将_tmain移到底部,你也没有为构造函数提供实现。

答案 1 :(得分:1)

你必须向前声明StateMachine类,否则编译器现在不知道如何处理该标识符,因为它还没有被告知他实际是什么,但至少,或者至少,它存在。

template<class TState, class TTrigger> class StateMachine;

int _tmain(int argc, _TCHAR* argv[])
{
    StateMachine<States,Triggers> sm;

    return 0;
}

// ...

template <class TState, class TTrigger> class StateMachine
{
public:
    StateMachine();

};

答案 2 :(得分:1)

编译器从上到下读取代码 - 它只能理解已经声明的内容