我有许多C和C ++文件的项目。我尝试添加线程安全队列。 在我的标题中:
#include <queue>
#include <mutex>
#include <thread>
#include <condition_variable>
// Some code..
当我尝试编译它时,它的错误是错误的:
In file included from /usr/include/c++/4.9/chrono:41:0,
from /usr/include/c++/4.9/mutex:39,
from queue.hpp:4,
from main.cpp:24:
/usr/include/c++/4.9/ctime:60:11: error: '::clock_t' has not been declared
using ::clock_t;
/usr/include/c++/4.9/condition_variable:161:23: error: 'time_t' in namespace 'std' does not name a type
static_cast<std::time_t>(__s.time_since_epoch().count()),
据我了解,编译器试图找到std :: time_ *,但为什么呢?怎么解决它? 谢谢!
UPD:main.cpp
#include "gpu.hpp" //Error here
int main(int argc, char const *argv[]) {
return 0;
}
gpu.hpp
#pragma once
#include "filter.hpp"
#include "queue.hpp" //Error here
#include <nvcuvid.h>
#include <avformat.h>
#include <vector>
queue.hpp
#pragma once
#include <queue>
#include <mutex>
#include <thread>
#include <condition_variable>
template<typename T>
class CQueue
{
std::queue<T> m_queue;
std::mutex m_mutex;
std::condition_variable m_cond;
// ...
第一条错误消息:
In file included from queue.hpp:3:0,
from gpu.hpp:3,
from main-test.cpp:2:
/usr/include/c++/4.9/ctime:60:11: error: '::clock_t' has not been declared
using ::clock_t;
生成文件:
FFMPEG_INCLUDES := -I$(FFMPEG_PATH) $(FFMPEG_PATH)/libavutil ...
$(OBJECTS_DIRS)/app-main-test.o: src/app/main-test.cpp
$(CXX) $(CXXFLAGS) $(FFMPEG_INCLUDES) $(CUDA_INCLUDES) -o $@ -c $<
答案 0 :(得分:4)
问题出在我的Makefile中。
我有包含每个ffmpeg文件夹的路径。 FFMPEG_INCLUDES := -I$(FFMPEG_PATH) $(FFMPEG_PATH)/libavutil ...
FFMPEG在ffmpeg/libavutil
中有time.c。它会导致与ctime发生冲突。
我将#include <log.h>
替换为#include<libavutil/log.h>
并修复了makefile FFMPEG_INCLUDES := -I$(FFMPEG_PATH)
中的包含路径
感谢@ user2807083寻求帮助。