необъявленный идентификатор - PullRequest
0 голосов
/ 04 ноября 2011

Нужен второй набор глаз. Я получаю следующую ошибку:

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 Ответ

6 голосов
/ 04 ноября 2011

Изменить порядок включает в себя:

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

Timezone.h использует TransitionTimeInfo, но после него включен "TransitionTimeInfo.h".

В идеале, вы всегда должны следоватьправило:

Каждый файл должен включать все необходимые ему заголовочные файлы и не полагаться на то, что они будут включены косвенно через некоторые другие файлы.

Итак, вы должны включить "TransitionTimeInfo.h "в" Timezone.h ".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...