未声明的标识符

时间:2011-11-04 17:05:20

标签: c++ visual-c++

需要第二组眼睛。我收到以下错误:

1>c:\users\thom\documents\cworkspace\barnaby\barnaby\timezone.h(15): error C2065: 'TransitionTimeInfo' : undeclared identifier

以下是我收到错误的代码行:

Timezone(std::vector<LeapSecondsInfo> &leapSecondsVector, std::vector<unsigned char> &localTimeTypes, std::vector<P6::UINT8>  &stdWallIndicators, &std::vector<unsigned long> &transitionTimes, std::vector<TransitionTimeInfo> &transitionTimesInfo, std::vector<P6::UINT8> &utcLocalIndicators){

这是我班级构造函数的行。该文件包含以下内容:

#include "stdafx.h"

这是stdafx.h的重要部分:

#include "targetver.h"
#include "barnaby.h"
#include "LeapSecondsInfo.h"
#include "p6types.h"
#include "Timezone.h"
#include "TransitionTimeInfo.h"

这是TransitionTimeInfo.h:

class TransitionTimeInfo
{
public:
    TransitionTimeInfo(long gmtOffset, bool daylightSavings, unsigned int abbreviationIndex){
        setAbbreviationIndex(abbreviationIndex);
        setDaylightSavings(daylightSavings);
        setGmtOffset(gmtOffset);
    }
    virtual ~TransitionTimeInfo(void) {};

    unsigned int getAbbreviationIndex(){
        return abbreviationIndex;
    }

    void setAbbreviationIndex(unsigned int newVal){
        abbreviationIndex = newVal;
    }

    bool isDaylightSavings(){
        return daylightSavings;
    }

    void setDaylightSavings(bool newVal){
        daylightSavings = newVal;
    }

    long getGmtOffset(){
        return gmtOffset;
    }

    void setGmtOffset(long newVal){
        gmtOffset = newVal;
    }
private:
    long            gmtOffset;
    bool            daylightSavings;
    unsigned int    abbreviationIndex;
};

更重要的是,如果我点击类型名称并点击F12(Visual C ++),它会将我带到此文件。

有什么想法吗?

感谢。

1 个答案:

答案 0 :(得分:6)

更改包含的顺序:

#include "TransitionTimeInfo.h"
#include "Timezone.h"

Timezone.h使用TransitionTimeInfo但后面包含“TransitionTimeInfo.h”。

理想情况下,您应该始终遵循以下规则:

每个文件都应包含所需的所有头文件,而不是依赖它们通过其他文件间接包含。

因此,您应该在“Timezone.h”中包含“TransitionTimeInfo.h”。