C++ 无效使用::-C++;禁止使用没有类型的向量

C++ 无效使用::-C++;禁止使用没有类型的向量,c++,vector,iterator,C++,Vector,Iterator,我偶然发现了一个对我来说毫无意义的编译错误。所以,当然,我转向StackOverflow 系统 Linux(Ubuntu10.0432位,gcc(Ubuntu4.4.3-4ubuntu5.1)4.4.3,EclipseIndigo **问题:** 当然,这是一个显而易见的问题;gcc在抱怨什么 背景 我有一个类ThreadTime,在它自己的cpp和h文件ThreadTime.cpp和.h中编码,并在它自己的名称空间THREAD_TIME中编码 在main()中,我启动两个线程,然后调用Thre

我偶然发现了一个对我来说毫无意义的编译错误。所以,当然,我转向StackOverflow

系统

Linux(Ubuntu10.0432位,gcc(Ubuntu4.4.3-4ubuntu5.1)4.4.3,EclipseIndigo

**问题:**

当然,这是一个显而易见的问题;gcc在抱怨什么

背景

我有一个类ThreadTime,在它自己的cpp和h文件ThreadTime.cpp和.h中编码,并在它自己的名称空间THREAD_TIME中编码

在main()中,我启动两个线程,然后调用ThreadA和ThreadB,然后进入一个无限循环,该循环休眠2秒钟,然后检查ThreadA和ThreadB是否仍在运行。特别是,如果ThreadA已停止,它将重新启动

每个线程都创建一个关联的ThreadTime对象。在我的两个线程中都有循环。在每个循环期间,ThreadTimer都会得到更新(在<2秒内),因此main()循环可以看到线程中的时间在前进

创建每个ThreadTimer时,其地址将添加到全局向量g_CthreadVector,类型为
std::vector
。g_CthreadVector是ThreadType.cpp中的全局文件

最好把整个班级都贴在这里。所以

ThreadTime.cpp

#include "ThreadTime.

namespace THREAD_TIME
{
   std::vector<ThreadTime*>      g_CthreadVector; // threads to kill and monitor

   ThreadTime::ThreadTime(thread_t* a, time_t b, void* c)
     : m_pthread(a), m_time(b), m_lasttime(b-2), m_function(c), m_terminate (FALSE)
   {
      m_name = "a ThreadTime object";
      g_CthreadVector.push_back( this );
   }

   ThreadTime::~ThreadTime()
   {
      std::vector<ThreadTime*>::iterator     it       (GetIterator());
      if ( it != g_CthreadVector.end() )
         g_CthreadVector.erase( it );
   }

   void     ThreadTime::UpdateTime( void )
   {
      m_lasttime = m_time;                                              // save the time to lasttime
      m_time = time(NULL);                                              // store the current time
      if ( m_lasttime == m_time )                                       // safety valve keep m_time
         m_lasttime--;                                                  //     ahead of m_lasttime
   }

   //---------------------------------------------------------
   // did time get advanced?
   //---------------------------------------------------------
   bool     ThreadTime::TimeAdvanced( void )
   {
      if ( m_lasttime < m_time )       return TRUE;
      else                             return FALSE;
   }

   void     ThreadTime::print( void )
   {
      std::vector<ThreadTime*>::iterator      tt_it   (GetIterator());
      std::vector<ThreadTime*>::iterator      it      (g_CthreadVector.end());

         for ( it = g_CthreadVector.begin(); it < g_CthreadVector.end(); it++ )
         {
            if ( tt_it == it )
               std::cout << "  ################### CURRENT OBJECT ###################### " << std::endl;
            else
               std::cout << "  $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ " << std::endl;

            std::cout << "  ThreadTime Object: " << (*it)->getName()    << std::endl
                      << "         thread ptr: " << (*it)->m_pthread    << std::endl
                      << "               time: " << (*it)->m_time       << std::endl
                      << "           lasttime: " << (*it)->m_lasttime   << std::endl
                      << "       function ptr: " << (*it)->m_function   << std::endl
                      << "          terminate: " << (*it)->m_terminate  << std::endl;
         }
         std::cout << "  $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ " << std::endl;
   }     // for ( it ... )

   std::vector<ThreadTime*>::iterator  ThreadTime::GetIterator( void )
   {
      std::vector<ThreadTime*>::iterator      it      (g_CthreadVector.end());

      for ( it = g_CthreadVector.begin(); it < g_CthreadVector.end(); it++)
      {
         if ( (*it)->m_pthread == m_pthread )
            break;
      }

      return it;
   }

} /* namespace THREAD_TIME */
#包括“线程时间”。
名称空间线程时间
{
std::vector g_CthreadVector;//要终止和监视的线程
ThreadTime::ThreadTime(线程a、时间b、无效*c)
:m_pthread(a)、m_time(b)、m_lasttime(b-2)、m_函数(c)、m_terminate(FALSE)
{
m_name=“线程时间对象”;
g_cthread vector.向后推(这个);
}
ThreadTime::~ThreadTime()
{
std::vector::iterator it(GetIterator());
if(it!=g_CthreadVector.end())
g_cthread vector.erase(它);
}
void ThreadTime::UpdateTime(void)
{
m_lasttime=m_time;//将时间保存到lasttime
m_time=time(NULL);//存储当前时间
如果(m_lasttime==m_time)//安全阀保持m_time
m_lasttime--;//在m_lasttime之前
}
//---------------------------------------------------------
//时间提前了吗?
//---------------------------------------------------------
bool ThreadTime::TimeAdvanced(无效)
{
如果(m_lasttimestd::cout在你的类的作用域中没有
std::vector
的声明。你需要一个
#include
在你的类的作用域中没有
std::vector
的声明。你需要一个
#include

在你的第一个
#include
指令中有一个点而不是结束语吗?我猜你呢u不包括在ThreadTime中。HY您不需要发布整个类,只需要发布一个–完整、简洁且具有代表性。要输出到控制台的代码(例如)是无关的。此外,请始终标记产生错误的行也要感谢@Anon Mail,他给我留下了一条我无法投票的评论。是的,我忘记了#include。而且,不,没有一段引语代替了结束语。有一位疲惫的打字员手指粗大。谢谢大家。更新了原始帖子。@Wes Miller,请不要将帖子编辑为“转到已解决状态”"正如您在此处所做的那样。保留原始的有问题的代码、问题和标题。存在已接受的答案足以表明此问题已得到解决。请回滚您最近的编辑。您的第一个
\include
指令中是否有一个点而不是结束语?我猜您不在包括ThreadTime.hy您不需要发布整个类,只需要发布一个完整、简洁且具有代表性的代码。要输出到控制台的代码(例如)是无关的。此外,请始终标记产生错误的行也要感谢@Anon Mail,他留下了一条我无法投票的评论。是的,我忘记了#include。而且,不,没有一条引语代替了结束语。有一位疲惫的打字员手指粗大。谢谢大家。对原始帖子进行了更新。@Wes Miller,请不要将帖子编辑为“转到已解决状态”正如您在此处所做的那样。保留原始的有问题的代码、问题和标题。存在已接受的答案足以表明此问题已得到解决。请回滚您最近的编辑。
#ifndef THREADTIME_H_
   #define THREADTIME_H_

   #include "platform.h"
   #include "opsys_common.h"
   #include "NAS_Thread.h"


   namespace THREAD_TIME
   {
      class ThreadTime;

      class ThreadTime
      {
         public:
            std::string       getName() const                  { return m_name; }
            void              setName(std::string name)        { m_name = name; }

            ThreadTime(thread_t* a, time_t b, void* c);
            ~ThreadTime();
            void     UpdateTime( void );
            bool     TimeAdvanced( void );
            void     print( void );

         private:
            std::vector<ThreadTime*>::iterator       GetIterator( void );

            std::string    m_name;
            thread_t*      m_pthread;
            time_t         m_time;
            time_t         m_lasttime;
            void*          m_function;
            bool           m_terminate;
   };

} /* namespace THREAD_TIME */

#endif /* THREADTIME_H_ */