Компиляция BADA простой программы helloworld из командной строки и получение ошибок

Я пытался скомпилировать простую программу Helloworld для BADA, но через командную строку. После компиляции я получаю ошибки как c:/Helloworld/src/Helloworld.cpp:12: ошибка: прототип для 'Osp::App::Application HelloWorld::CreateInstance()'не соответствует ни одному в классе'HelloWorld' C:/Helloworld/inc/HelloWorld.h:21: ошибка: кандидат является статическим Osp::App::Application* HelloWorld::CreateInstance() может любой помочь телу то что надо с этим делать. Спасибо

Код для 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

Код для 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
}

Код для 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");
}
}

1 ответ

Компилятор жалуется, что вы определили метод с этой сигнатурой:

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

тогда как HelloWorld класс заявляет, что его CreateInstance Метод имеет эту подпись:

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

Обратите внимание на разницу в типе возвращаемого значения. Определение класса говорит, что метод с этим именем возвращает Application указатель, но вы реализовали метод, который возвращает Application объект.

В будущем, пожалуйста, отправьте код вместе с ошибками компилятора. Редко можно адекватно объяснить ошибки компилятора в отрыве от кода, который их породил. Например, я не могу сказать вам, какой тип возврата является правильным в этом случае; Я могу только сказать вам, что возвращаемые типы не совпадают (это именно то, что компилятор уже сказал).

Другие вопросы по тегам