ctime std :: namespace冲突

时间:2016-03-14 08:27:33

标签: c++

我有许多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 $<

1 个答案:

答案 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寻求帮助。