在Windows10 64位计算机上使用64位MSVC2015编译BOOST库时遇到问题。
我使用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>
,但它没有帮助。
#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匹配并给出错误。