- 我可以从线程扩展我的类,还是必须通过处理程序在类内管理线程?
- 如何保存所述线程处理程序?std :: thread本身似乎没有命名类型。
请注意,以上内容保留了HTML标签。
src/CHandler.h:27:9: error: 'thread' in namespace 'std' does not name a type
std::thread _thread;
^
这里是我尝试扩展线程的代码:
src/CHandler.h:17:30: error: expected class-name before '{' token
class CHandler : std::thread {
^
完整而麻烦的标题:
#ifndef __projectm__CHandler__
#define __projectm__CHandler__
#include <set>
#include <vector>
#include <thread>
#include "CListener.h"
class CHandler {
public:
virtual bool subscribe(std::shared_ptr<CListener> aListener);
virtual bool unsubscribe(std::shared_ptr<CListener> aListener);
virtual bool hasSubscriber(std::shared_ptr<CListener> aListener);
virtual ~CHandler() {}
protected:
std::thread _thread;
std::vector<std::weak_ptr<CListener> > _subscribers;
std::set<const CListener *> _subscribersSet;
virtual void run();
};
#endif /* defined(__projectm__CDefaultHandler__) */
编译器版本:
bash-3.1$ g++ --version
g++.exe (GCC) 4.8.1
Makefile(一团糟,我知道 - 仍在学习这个该死的东西):
CC=g++
OUTFILE=game
BINDIR=bin
SRCDIR=src
OBJDIR=obj
CFLAGS=
LDFLAGS=-std=c++0x
all: core
# Ядро проекта.
core: $(OBJDIR)/main.o $(OBJDIR)/CGame.o $(OBJDIR)/CHandler.o $(OBJDIR)/CListener.o
$(CC) $(CFLAGS) $(wildcard $(OBJDIR)/*.o) -o $(BINDIR)/$(OUTFILE)
$(OBJDIR)/main.o: $(OBJDIR)
$(CC) $(LDFLAGS) $(SRCDIR)/main.cpp -c -o $(OBJDIR)/main.o
$(OBJDIR)/CGame.o: $(OBJDIR)
$(CC) $(LDFLAGS) $(SRCDIR)/CGame.cpp -c -o $(OBJDIR)/CGame.o
$(OBJDIR)/CHandler.o: $(OBJDIR)
$(CC) $(LDFLAGS) $(SRCDIR)/CHandler.cpp -c -o $(OBJDIR)/CHandler.o
$(OBJDIR)/CListener.o: $(OBJDIR)
$(CC) $(LDFLAGS) $(SRCDIR)/CListener.cpp -c -o $(OBJDIR)/CListener.o
# Создаем директорию для объектов, если ее нет.
$(OBJDIR):
mkdir $(OBJDIR)
main.o: $(SRC)/main.cpp
std::thread
是一个类。我不明白你的问题。 - Björn Pollex__projectm__CHandler__
)的名称以及以下划线和大写字母开头的名称都是保留给实现的。请不要使用它们。 - Pete Becker