未声明的标识符

Tho*_*hom 0 c++ visual-c++

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

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

这是我收到错误的代码行:

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){
Run Code Online (Sandbox Code Playgroud)

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

#include "stdafx.h"
Run Code Online (Sandbox Code Playgroud)

这是stdafx.h的重要部分:

#include "targetver.h"
#include "barnaby.h"
#include "LeapSecondsInfo.h"
#include "p6types.h"
#include "Timezone.h"
#include "TransitionTimeInfo.h"
Run Code Online (Sandbox Code Playgroud)

这里是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;
};
Run Code Online (Sandbox Code Playgroud)

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

有任何想法吗?

谢谢.

Alo*_*ave 6

更改包含的顺序:

#include "TransitionTimeInfo.h"
#include "Timezone.h"
Run Code Online (Sandbox Code Playgroud)

其后包含"TransitionTimeInfo.h" 的Timezone.h用途TransitionTimeInfo.

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

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

因此,您应该在"Timezone.h"中包含"TransitionTimeInfo.h".