我有3个课程
// service.h
#ifndef SERVICE_H
#define SERVICE_H
#include "controller.h"
class Service
{
Controller controller;
public:
void request();
};
#endif /* SERVICE_H */
名为Scheduler的第二个类
// scheduler.h
#ifndef SCHEDULER_H
#define SCHEDULER_H
#include <QTimer>
#include "service.h"
class Scheduler : public QObject
{
Q_OBJECT
static const int frequency = 5000;
QTimer *timer;
Service service;
public:
Scheduler();
public slots:
void process();
};
#endif /* SCHEDULER_H */
和第三个名为Controller的控制器定义如下
// controller.h
#ifndef CONTROLLER_H
#define CONTROLLER_H
// system include
#include <QObject>
class Controller : public QObject
{
Q_OBJECT
public:
virtual ~Controller();
};
#endif // CONTROLLER_H
对于我的实现部分
// controller.cpp
#include "controller.h"
Controller::~Controller()
{
}
第二个文件
// scheduler.cpp
#include "scheduler.h"
Scheduler::Scheduler()
{
// create a timer
timer = new QTimer();
// setup signal and slot connection
connect(timer, SIGNAL(timeout()), this, SLOT(process()));
timer->start(frequency);
}
void Scheduler::process()
{
}
和服务源文件
// service.cpp
#include "service.h"
void Service::request()
{
}
最后,主要功能定义如下
// main.cpp
#include <QCoreApplication>
#include "scheduler.h"
int main(int argc, char* argv[])
{
QCoreApplication a(argc, argv);
// create the scheduler instance
Scheduler scheduler;
// event loop
return a.exec();
}
该示例非常简单,但是在尝试编译时总是收到以下错误消息:
$ make
[ 7%] Automatic moc for target project
[ 7%] Built target project_automoc
[ 15%] Generating __/inc/moc_controller.cpp
Scanning dependencies of target project
[ 23%] Building CXX object src/CMakeFiles/project.dir/scheduler.cpp.o
[ 30%] Building CXX object src/CMakeFiles/project.dir/service.cpp.o
In file included from /usr/include/i386-linux-gnu/qt5/QtCore/qtypeinfo.h:34:0,
from /usr/include/i386-linux-gnu/qt5/QtCore/qglobal.h:1098,
from /usr/include/i386-linux-gnu/qt5/QtCore/qnamespace.h:37,
from /usr/include/i386-linux-gnu/qt5/QtCore/qobjectdefs.h:41,
from /usr/include/i386-linux-gnu/qt5/QtCore/qobject.h:40,
from /usr/include/i386-linux-gnu/qt5/QtCore/QObject:1,
from /home/xxxx/workspace/project/inc/controller.h:5,
from /home/xxxx/workspace/project/inc/service.h:6,
from /home/xxxx/workspace/project/src/service.cpp:4:
/usr/include/i386-linux-gnu/qt5/QtCore/qtypetraits.h:523:63: error: template
argument 1 is invalid
template<class U> static typename test<!!sizeof(::new U())>::type
sfinae(U*);
^
/usr/include/i386-linux-gnu/qt5/QtCore/qtypetraits.h:523:39: error: expected
nested-name-specifier
template<class U> static typename test<!!sizeof(::new U())>::type
sfinae(U*);
^
/usr/include/i386-linux-gnu/qt5/QtCore/qtypetraits.h:523:71: error:
expected initializer before ‘sfinae’
template<class U> static typename test<!!sizeof(::new U())>::type
sfinae(U*);
请帮助我解决此问题。
PS:我使用CMAKE构建:
set (EXECUTABLE projet)
set (BUILD_DIR ${CMAKE_SOURCE_DIR}/build)
set (APPLICATION_DIR ${CMAKE_SOURCE_DIR}/application)
set (CMAKE_LIBRARY_PATH "/usr/local/lib")
include_directories(/usr/local/include)
link_directories(/usr/local/lib)
include_directories(${CMAKE_SOURCE_DIR}/inc)
find_package(Qt5 COMPONENTS Core REQUIRED)
set (CMAKE_INCLUDE_CURRENT_DIR ON)
set (CMAKE_AUTOMOC ON)
set(SOURCES
scheduler.cpp
service.cpp
controller.cpp
main.cpp
)
set(MOC_HEADERS
${CMAKE_SOURCE_DIR}/inc/scheduler.h
${CMAKE_SOURCE_DIR}/inc/controller.h
${CMAKE_SOURCE_DIR}/inc/service.h
)
qt5_wrap_cpp(MOC_FILES ${MOC_HEADERS})
add_executable (${EXECUTABLE}
${SOURCES}
${MOC_FILES})
target_compile_options (${EXECUTABLE} PUBLIC -std=c++11 -Wall)
target_link_libraries(${EXECUTABLE} Qt5::Core)
谢谢。