使用C2039增加编译错误:time_t不是std

时间:2018-03-20 09:35:37

标签: c++ visual-c++ boost

在Windows10 64位计算机上使用64位MSVC2015编译BOOST库时遇到问题。

enter image description here

我使用QT创建者作为IDE并使用flag启用C ++ 14 在.pro

QMAKE_CXXFLAGS + = -std = c ++ 14

这是BOOST库中发生的错误部分:c_time.hpp

  //! requires a pointer to a user created std::tm struct
  inline
  static std::tm* localtime(const std::time_t* t, std::tm* result)
  {
    result = std::localtime(t);
    if (!result)
      boost::throw_exception(std::runtime_error("could not convert calendar time to local time"));
    return result;
  }
  //! requires a pointer to a user created std::tm struct
  inline
  static std::tm* gmtime(const std::time_t* t, std::tm* result)
  {
    result = std::gmtime(t);
    if (!result)
      boost::throw_exception(std::runtime_error("could not convert calendar time to UTC time"));
    return result;
  }

编译器大声说std :: time_t time_t不是std命名空间的一部分 也与std :: localtime和std :: gmtime

相同

在调用所有boost库之前,我还在main中#include <ctime> <time.h> <cstdlib>,但它没有帮助。

当我试图追溯到ctime(在C:\ Program Files(x86)\ Microsoft Visual Studio 14.0 \ VC \ include \ ctime中的std c ++文件)时,我发现了另一件事,这是ctime中代码的一部分

 #if _GLOBAL_USING && !defined(RC_INVOKED)
_STD_BEGIN
using _CSTD clock_t; using _CSTD size_t;
using _CSTD time_t; using _CSTD tm;
using _CSTD asctime; using _CSTD clock; using _CSTD ctime;
using _CSTD difftime; using _CSTD gmtime; using _CSTD localtime;
using _CSTD mktime; using _CSTD strftime; using _CSTD time;
_STD_END
 #endif /* _GLOBAL_USING */
#endif /* _CTIME_ */code here

错误是clock_t:符号不能用于使用声明错误

clock_t不是全局命名空间的成员

我尝试使用不同版本的BOOST库(boost 1.64,boost 1.65,boost 1.66)我从预编译BOOST二进制文件下载的库并直接安装到我的机器上(https://sourceforge.net/projects/boost/files/boost-binaries/

这是我使用MSVC2015作为编译器的QT创建者的专业文件

BOOST_PATH   = C:/local/boost_1_66_0
INCLUDEPATH +=   $${BOOST_PATH}
LIBS        += -L$${BOOST_PATH}/lib64-msvc-14.1
LIBS        += -lboost_atomic-vc140-mt-1_66
LIBS        += -lboost_chrono-vc140-mt-1_66
..........

SOURCES += \
        main.cpp \
        mainwindow.cpp

HEADERS += \
        mainwindow.h

FORMS += \
        mainwindow.ui

这是我的main.cpp的样子。这是一个干净的QT应用程序项目。其他文件中没有任何内容

#include <stdlib.h>
#include <cstdlib>
#include <limits>
#include <fstream>
#include <vector>
#include "boost/filesystem.hpp"

#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}

注意:我认为问题是MSVC编译器在错误的命名空间中查找函数。例如std :: localtime()应该在std命名空间中找到但编译器找到这个函数&#34; localtime&#34;在c_time.hpp中它尝试将std :: localtime与boost :: localtime匹配并给出错误。

0 个答案:

没有答案