c++ - Header 中的类尚未声明

标签 c++

<分区>

我知道我会踢自己,但我看不到问题...

我一直收到错误 /usr/local/awdn/alucard/include/DateTimeConvert.h:12:17: 错误:'DateTimeParse' 尚未声明

但它包括在内。我没看到什么?

#ifndef DATETIMECONVERT_H
#define DATETIMECONVERT_H

#include "TimeZoneSpec.h"
#include "DateTimeParse.h"
#include <vector>
#include <string>

class DateTimeConvert
{
public:
  int _to_epoch(DateTimeParse dtp, TimeZoneSpec tzdb);
  int _get_weekday_int(DateTimeParse dtp) {return _zeller(dtp);};
  std::string _get_weekday_abbr(DateTimeParse dtp) {return WEEKDAY_ABBR[_zeller(dtp)];};
  std::string _get_weekday_full(DateTimeParse dtp) {return WEEKDAY_FULL[_zeller(dtp)];};
  int _get_month_to_day(int month) {return MONTH_TO_DAY[month];};
  int _zeller(DateTimeParse dtp);
private:
  const int MIN_TO_SEC = 60;
  const int HOUR_TO_SEC = 3600;
  const int DAY_TO_SEC = 86400;
  const int EPOCH_YEAR = 1970;
  const int YEAR_TO_DAY = 365;
  const std::vector<int> MONTH_TO_DAY = {31,28,31,30,31,30,31,31,30,31,30,31};
  const std::vector<int> ZELLER_MONTH_TABLE = {13,14,3,4,5,6,7,8,9,10,11,12};
  const std::vector<std::string> WEEKDAY_ABBR = {"Sat","Sun","Mon","Tue","Wed","Thu","Fri"};
  const std::vector<std::string> WEEKDAY_FULL = {"Saturday","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday"};
};

#endif

DateTimeParse.h:

#ifndef DATETIMEPARSE_H
#define DATETIMEPARSE_H

#include "TimeZoneSpec.h"
#include "DateTimeFormat.h"
#include "DateTimeConvert.h"
#include <string>
#include <map>
#include <vector>

class DateTimeParse
{
public:
  DateTimeParse();
  void _parse(std::string inDateTime, std::string inFormat);
  bool _is_dst(DateTimeConvert dtc, TimeZoneSpec tzs);
  bool _is_leapyear();;
  int _get_year() {return m_year;}
  void _set_year(int year) {m_year = year;};
  int _get_month() {return m_month;};
  void _set_month(int month) {m_month = month;};
  int _get_day() {return m_day;};
  void _set_day(int day) {m_day = day;};
  int _get_hour() {return m_hr;};
  void _set_hour(int hr) {m_hr = hr;};
  int _get_min() {return m_min;};
  void _set_min(int min) {m_min = min;};
  int _get_sec() {return m_sec;};
  void _set_sec(int sec) {m_sec = sec;};
  std::string _get_tz() {return m_tz;};
private:
  void _parsepart(std::string inDateTime, std::string inFormat);
  std::map<std::string,DateTimeFormat> m_map;
  const std::map<std::string,std::vector<int> > m_ftz = {{"Z", {3,0,0}}};
  int m_year = 0;
  int m_month = 0;
  int m_day = 0;
  int m_hr = 0;
  int m_min = 0;
  int m_sec = 0;
  std::string m_tz = "CST";
};

#endif

最佳答案

你有一个循环包含。

你有包含头文件 B 的头文件 A 和包含头文件 A 的头文件 B。

第二次包含头文件A,发现它的ifndef/define guard已经设置,并预处理为一个空文件。

然后编译器继续读取头文件 B,看到对头文件 A 中定义的类的引用,但到目前为止它还没有真正读取它,并告诉你你做错了。

您需要在头文件中显式添加前向声明。

关于c++ - Header 中的类尚未声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34144924/

相关文章:

c++ - 将 std::find_if() 与采用多个输入参数的比较函数一起使用

c++ - 如何将 const char* 转换为字符串,然后再转换回 char*?

c++ - 是否可以在 QCalendarWidget 中禁用星期六和星期日?

c++ - 在 Windows 服务中使用 SAPI 进行简单的文本转语音

c++ - 为 Windows 7 定义预处理器指令

c++ - 在 C++ 中将字符串乘以 int

c++ - C++ 中的整数舍入

C++:如何连接字符串文字之间的变量?

c++ - 获取 main() 函数的地址是否违法?

c++ - Valgrind 在通过指向结构的指针访问结构成员时提示无效读取