【问题标题】:Does Bada IDE have code completion and meaningful error messages?Bada IDE 是否有代码完成和有意义的错误消息?
【发布时间】:2011-12-13 16:00:16
【问题描述】:

我正在尝试将 Bada 应用程序从 1.2 升级到 2.0,但没有使用过 Bada。我有项目构建,可以在模拟器中运行它,但我收到大量警告,我无法单击文本框来获取键盘并在模拟器中输入任何内容。

不幸的是,警告消息对我来说是完全神秘的,例如

SearchForm::SearchForm(void) :

在此处初始化时给出警告消息

这里初始化的时候是什么??!!

此外,所有的 TryCatch 语句都显示语法错误,我在互联网上找到的任何东西似乎都没有让它高兴:

result OnDraw()
{
    result r = E_SUCCESS;

    Canvas* readerCanvas = GetCanvasN();
    TryCatch(E_SUCCESS == GetLastResult(), "Failed to get canvas: %S", GetErrorMessage(r));

     if (readerCanvas)
     {
         Rectangle tempRect(0, 0, GetBounds().width, GetBounds().height);
         Point tempPoint(0, 0);
         r = readerCanvas->Copy(tempPoint, *iDrawingCanvas, tempRect);
         TryCatch(E_SUCCESS == r, "Failed to copy canvas: %S", GetErrorMessage(r));
         delete readerCanvas;
     }

    return r;

    CATCH:
        delete readerCanvas;
        return r;
}

TryCatch 行显示“语句无效”,如果我尝试对其进行编辑以匹配我发现的示例,则会出现语法错误。

这是怎么回事?

【问题讨论】:

    标签: c++ syntax code-completion bada


    【解决方案1】:

    您似乎正试图通过完全断章取义而仅部分引用它们来超越您的 IDE 所谓的错误消息。让我分解一下:

    TryCatch

    宏定义为

    TryCatch(condition, cleanup, message)
    

    当条件被评估为假时,这将转到 CATCH。你可以这样想这个宏:

    if (!condition)
    {
        goto CATCH;
    }
    

    例如,你可以这样使用它:

    void TryCatchDemo::UseTryCatch(void)
    {
        TryCatch(1==2, , "1 is NOT 2");
    
        AppLog("This should not appear");
    
        CATCH:
            AppLog("Catch block");
    }
    

    现在,您的第二个参数是一个字符串文字,"Failed to get canvas: %S",不出所料,它在用作语句时不起作用:

        "does nothing";
        123;              // just like this
    

    因此,编译器很乐意警告您您可能有其他想法。另请注意,statement has no effect 不是语法错误。

    "这里初始化时"

    了解您的语言!引用的代码不是合法的 C++ 开头:

      SearchForm::SearchForm(void) :
    

    充其量这是构造函数定义的开始,缺少初始化列表和主体。在 C++ 语言规范中,类成员按照它们被声明的顺序进行初始化,而不是按照它们在初始化列表中出现的顺序。一个最小的例子:

    struct X
    {
         int a, b;
         X() : b(), a() {}
    };
    

    这会导致编译器警告:

    /tmp/test.cpp|3 col 13| warning: ‘X::b’ will be initialized after [-Wreorder]
    /tmp/test.cpp|3 col 10| warning:   ‘int X::a’ [-Wreorder]
    /tmp/test.cpp|4 col 6| warning:   when initialized here [-Wreorder]
    

    如您所见,您不仅剪辑了代码,还剪辑了警告!如果您阅读了整个消息和整个代码,那么修复将非常明显:

    struct X
    {
         int a, b;
         X() : a(), b() {}
    };
    

    奖励:如果您想知道为什么排序很重要,请考虑这样做时会发生什么:

    struct X
    {
         int a, b;
         X() : b(), a(b) {} // OOPS!
    };
    

    希望对你有帮助

    在宏中使用格式字符串

    编辑我刚刚注意到这一点:可能不支持在 Try/Catch 宏中使用格式字符串:

    每个支持消息参数的宏实际上都支持格式字符串。格式字符串类似于 printf 的格式字符串在支持它的系统上(bada 不支持)

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-26
    • 2011-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-19
    • 1970-01-01
    相关资源
    最近更新 更多