Я наткнулся на ошибку компиляции, которая не имеет для меня никакого смысла. Так, конечно, я перехожу к StackOverflow .....Недопустимое использование :: - C++ запрещает использование вектора без типа
Система
Linux (Ubuntu 10,04 32 бит, GCC (Ubuntu 4.4.3-4ubuntu5.1) 4.4.3, Eclipse Indigo
** вопрос **
Очевидный вопрос, конечно, Что НКУ жалуясь фон
о?
У меня есть класс ThreadTime, закодированный в его собственных файлах cpp и h, ThreadTime.cpp и .h и внутри собственного пространства имен THREAD_TIME;
В main() Я запускаю два потока, вызываю ThreadA и ThreadB, затем перехожу в бесконечный цикл, который спит 2 секунды, затем проверяет, все ли запущены ThreadA и ThreadB. в частности, если ThreadA остановлен, он перезапускается.
Каждый поток создает связанный объект ThreadTime. В обоих моих потоках есть петли. Во время каждого цикла ThreadTimer обновляется (в < 2 сек), поэтому цикл main() может видеть, что время идет в потоках.
По мере создания каждого ThreadTimer его адрес добавляется к глобальному вектору g_CthreadVector типа std::vector<ThreadTime*>
. 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 */
ThreadTime.h
#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_ */
И, наконец, вот сообщения об ошибках:
‘;’
ожидается до того‘<’
лексема ThreadTime.h линия 37недопустимое использование
‘::’
ThreadTime.h линии 37ISO C++ запрещает декларации
‘vector’
без каких-либо типа ThreadTime.h линии 37
Есть ли точка вместо закрывающей цитаты в вашей первой директиве '# include'? – dasblinkenlight
Я предполагаю, что вы не включаете в ThreadTime.h –
Вам не нужно публиковать весь класс, вам просто нужно отправить [минимальный тестовый пример] (http://sscce.org/) -полный, кратким и представительным. Код для вывода на консоль (например) является посторонним. Кроме того, всегда указывайте, какая строка (-ы) производит// ошибку (-ы). – outis