2011-05-08 10 views
1

저는 maemo 용 Qt 모바일 응용 프로그램을 만들기 위해 C++을 사용하고 있습니다.ISO C++은 ... 형식이없는 선언을 금지합니다.

나는 나의 클래스 선언을 가지고,하지만 난이 오류 얻을 :

ISO C++ forbids declaration of 'QGeoPositionInfoSource' with no type 

다음 내 코드 :

phonehelper.h

#ifndef PHONEHELPER_H 
#define PHONEHELPER_H 

#include <QObject> 
#include <QGeoPositionInfoSource> 


class PhoneHelper : public QObject 
{ 
    Q_OBJECT 

public: 
    explicit PhoneHelper(QObject *parent = 0); 
    void GetGPSData(const char * callbackSlot); 

private: 
    /* 
    * The error occures here on the line below */ 
    QGeoPositionInfoSource *gpsSource;   // PROBLEM HERE 

private slots: 
    void positionUpdated(const QGeoPositionInfo &info); 
}; 

#endif // PHONEHELPER_H 

phonehelper.cpp

#include "phonehelper.h" 

PhoneHelper::PhoneHelper(QObject *parent) : 
    QObject(parent) 
{ 
} 

PhoneHelper::GetGPSData(const char *callbackSlot) 
{ 
    gpsSource = QGeoPositionInfoSource::createDefaultSource(this); 
      if (gpsSource) { 
       connect(source, SIGNAL(positionUpdated(QGeoPositionInfo)), 
         this, SLOT(positionUpdated(QGeoPositionInfo))); 
       connect(source, SIGNAL(positionUpdated(QGeoPositionInfo)), 
         this, SLOT(callbackSlot(QGeoPositionInfo))); 
       gpsSource->startUpdates(); 
      } 
} 

PhoneHelper::positionUpdated(const QGeoPositionInfo &info) 
{ 
     gpsSource->stopUpdates(); 
     delete gpsSource; 
} 

Project.pro

DEPLOYMENTFOLDERS = # file1 dir1 

symbian:TARGET.UID3 = 0xE0EEBE99 


symbian:TARGET.CAPABILITY += NetworkServices 

# MOBILITY variable. 
CONFIG += mobility 
MOBILITY += location 

SOURCES += main.cpp mainwindow.cpp \ 
    phonehelper.cpp 
HEADERS += mainwindow.h \ 
    phonehelper.h 
FORMS += mainwindow.ui 


include(deployment.pri) 
qtcAddDeployment() 

위의 오류가 무엇을 의미합니까?

+3

같은 QtMobility 네임 스페이스를 사용했다는 것을 보지 못했다. 어떤 종류의 것이 중요합니다. – Jon

+0

친애하는 Jon .. 빌드하는 동안 오류가 발생합니다. 그 파일은 내 .h 파일의'QGeoPositionInfoSource * gpsSource;'입니다 ... 정확한 오류 텍스트는 위에 표시됩니다 ... –

+1

아마도'QGeoPositionInfoSource'는 일부 네임 스페이스에 있습니다. (죄송합니다. QT를 사용했습니다). 당신은 그것을 확인할 수 있습니다. –

답변

3

내가 정확하게 오류를 트리거 라인과 정확한 오류 텍스트를 제공하는 말을 잊었이 using namespace QtMobility;

+4

'QtMobility :: QGeoPositionInfoSource'를 사용하여 헤더에 전체 네임 스페이스를 포함하지 않는 것이 좋습니다. –

+3

헤더 파일에 using 절을 넣으면 문제가 발생합니다. 형식 이름을 완전히 한정하십시오. –

+0

헤더에서 forward 선언문을 사용해야합니다. 이것은 네임 스페이스에 대해서는 중요하지 않습니다 :'namespace QtMobility {class QGeoPositionInfoSource; }'. 이상하게 보일지 모르지만 네임 스페이스 멤버를 전달 선언하는 올바른 방법입니다. – MSalters