2010-08-30 9 views
1

J'essayais de compiler un simple programme Helloworld pour BADA, mais par l'invite de commande.Après la compilation je peux obtenir les erreurs comme c: /Helloworld/src/Helloworld.cpp: 12: erreur: prototype pour 'Osp :: App :: Application HelloWorld :: CreateInstance()' ne correspond à aucun dans la classe 'HelloWorld' C: /Helloworld/inc/HelloWorld.h: 21: erreur: le candidat est: statique Osp :: App :: Application * HelloWorld :: CreateInstance() pourrait tout organisme aider ce qui doit être fait avec. MerciCompilation BADA programme helloworld simple à partir de l'invite de commande et d'obtenir des erreurs

Code pour Helloworld.h

#ifndef __HELLOWORLD_H__ 
#define __HELLOWORLD_H__ 

#include <FBase.h> 
#include <FGraphics.h> 
#include <FLocales.h> 
#include <FSystem.h> 
#include <FApp.h> 

using namespace Osp::Base; 
using namespace Osp::Graphics; 
using namespace Osp::Locales; 
using namespace Osp::System; 
using namespace Osp::App; 

class HelloWorld : 
    public Application // must inherit from Application class 
{ 
public: 
    // The application must have a factory method that creates an instance of the application. 
    static Application* CreateInstance(void); 

public: 
    HelloWorld(); 
    ~HelloWorld(); 

public: 
     // The application must provide its name. 
    String GetAppName(void) const; 

protected: 
    // The application must provide its ID. 
    AppId GetAppId(void) const; 

    AppSecret GetAppSecret(void) const; 

public: 
    // This method is called when the application is initializing. 
    bool OnAppInitializing(AppRegistry& appRegistry); 

    // This method is called when the application is terminating. 
    bool OnAppTerminating(AppRegistry& appRegistry); 

    // Thie method is called when the application is brought to the foreground 
    void OnForeground(void); 

    // This method is called when the application is sent to the background. 
    void OnBackground(void); 

    // This method is called when the application has little available memory. 
    void OnLowMemory(void); 

    // This method is called when the device's battery level changes. 
    void OnBatteryLevelChanged(BatteryLevel batteryLevel); 
}; 

#endif 
code

pour Helloworld.cpp

#include "HelloWorld.h" 

HelloWorld::HelloWorld() 
{ 
} 

HelloWorld::~HelloWorld() 
{ 
} 

Application* 
HelloWorld::CreateInstance(void) 
{ 
    // You can create the instance through another constructor. 
    return new HelloWorld(); 
} 

String 
HelloWorld::GetAppName(void) const 
{ 
    static String appName(L"HelloWorld"); 
    return appName; 
} 

AppId 
HelloWorld::GetAppId(void) const 
{ 
    static AppId appId(L"93bt1p123e"); 
    return appId; 
} 

AppSecret 
HelloWorld::GetAppSecret(void) const 
{ 
    static AppSecret appSecret(L"9C645DDBA19C71BAD1204DA4DAA7A0B9"); 
    return appSecret; 
} 

bool 
HelloWorld::OnAppInitializing(AppRegistry& appRegistry) 
{ 
    // TODO: 
    // Initialization including UI construction can be done here. 
    // Load the application's latest data, if necessary. 
    // If this method is successful, return true; otherwise, return false. 
    return true; 
} 

bool 
HelloWorld::OnAppTerminating(AppRegistry& appRegistry) 
{ 
    // TODO: 
    // Deallocate or close any resources still alive. 
    // Save the application's current states, if applicable. 
    // If this method is successful, return true; otherwise, return false. 
    return true; 
} 

void 
HelloWorld::OnForeground(void) 
{ 
    result r = E_SUCCESS; 

    Canvas* pCanvas = GetAppFrame()->GetCanvasN(); 
    if(pCanvas == null) 
     return; 

    Font* pFont = new Font(); 
pFont->Construct(FONT_STYLE_PLAIN | FONT_STYLE_BOLD, 50); 
    pCanvas->SetFont(*pFont); 

    r = pCanvas->DrawText(Point(30, 30), GetAppName()); 
    if (IsFailed(r)) 
    { 
     AppLog("pCanvas->DrawText() failed.\n"); 
     delete pCanvas; 
     return; 
    } 

    r = pCanvas->Show(); 
    if (IsFailed(r)) 
    {   AppLog("pCanvas->Show() failed.\n"); 
     delete pCanvas; 
     return; 
    } 

    delete pCanvas; 

} 

void 
HelloWorld::OnBackground(void) 
{ 
} 

void 
HelloWorld::OnLowMemory(void) 
{ 
    // TODO: 
    // Deallocate as many resources as possible. 
} 

void 
HelloWorld::OnBatteryLevelChanged(BatteryLevel batteryLevel) 
{ 
    // TODO: 
    // It is recommended that the application save its data, 
    // and terminate itself if the application consumes much battery 
} 

Code pour Helloworldentry.cpp

/** 
* OSP Application entry point(OspMain) introduced. 
*/ 
#include <fapp.h> 
#include "HelloWorld.h" 

using namespace Osp::Base::Collection; 

extern "C" 
{ 
    __declspec(dllexport) void OspMain(int hInstance, int argc, char *argv[]); 
} 

/** 
* Entry function of OSP Application which is called by the operating system. 
*/ 
extern "C" { 
void OspMain(int hInstance, int argc, char *argv[]) 
{ 
    AppLog("OspMain() Started. \n"); 

    result r = E_SUCCESS; 

    ArrayList* pArgs = new ArrayList(); 
    pArgs->Construct(); 
    for (int i = 0; i < argc; i++) 
    { 
     String* pEachArg = new String(argv[i]); 
     pArgs->Add(*pEachArg); 
    } 

    r = Osp::App::Application::Execute(HelloWorld::CreateInstance, pArgs); 
    if (IsFailed(r)) 
    { 
     AppLog("Application execution has failed.\n"); 
    } 

    if (pArgs) 
    { 
     pArgs->RemoveAll(true); 
     delete pArgs; 
    } 

    AppLog("OspMain() Ended. \n"); 
} 
} 

Répondre

0

Le compilateur se plaint que vous avez défini une méthode avec cette signature:

Osp::App::Application HelloWorld::CreateInstance() 

alors que la classe HelloWorld déclare que sa méthode CreateInstance a cette signature:

Osp::App::Application* HelloWorld::CreateInstance() 

Notez la différence dans le type de retour. La définition de classe indique que la méthode avec ce nom renvoie un pointeur mais que vous avez implémenté une méthode qui renvoie un Applicationobjet.

À l'avenir, veuillez envoyer du code avec les erreurs du compilateur. Il est rarement possible d'expliquer correctement les erreurs du compilateur isolément du code qui les a produites. Par exemple, je ne peux pas vous dire quel type de retour est correct dans ce cas; Je peux seulement vous dire que les types de retour ne correspondent pas (ce qui est exactement ce que le compilateur a déjà dit).

+0

Bonjour merci pour votre aide. Maintenant, après avoir fait quelques changements, je reçois les erreurs comme c: /Helloworld/src/Helloworld.cpp: Dans la fonction membre statique 'Osp statique :: App :: Ap plication * BonjourWorld :: CreateInstance()': c: /Helloworld/src/Helloworld.cpp: 15: erreur: impossible d'allouer un objet de abstrac t type 'HelloWorld' C: /Helloworld/inc/HelloWorld.h: 18: note: car la fonction virtuelle suivante ns sont purs dans 'HelloWorld': C: /bada/1.0.0b3/include/FAppApplication.h: 344: note: booléen virtuel Osp :: App :: A pplication :: OnAppTerminating (Osp :: App :: AppRegistry &, bool) .. Je poste le code ci-dessous – Suvin

+0

La classe 'Application' définit une fonction virtuelle pure appelée' OnAppTerminating' qui prend deux arguments, un 'AppRegistry & 'et un' bool'. Pour créer des instances de votre classe 'HelloWorld', vous devez implémenter cette méthode. Vous avez implémenté une méthode appelée OnAppTerminating, mais elle ne prend pas le bon nombre d'arguments. –

+0

Maintenant encore une fois après avoir corrigé les erreurs..l'erreur que j'obtiens est c: /Helloworld/src/Helloworld.cpp: 18: erreur: non 'Osp :: App :: Application * BonjourWorld :: CreateInstance()' membre fonction déclarée dans la classe 'HelloWorld' Avoir essayé beaucoup de choses mais je n'arrive pas à comprendre. – Suvin

Questions connexes