我正在尝试将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行说“语句没有效果”,如果我尝试编辑它以匹配我发现的示例,我会收到语法错误。
这是怎么回事?
答案 0 :(得分:1)
似乎你试图通过完全脱离上下文而仅部分地引用它们来超越IDE所谓的错误消息。让我分解一下:
宏定义为
TryCatch(condition, cleanup, message)
当条件评估为false时,这将转到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不支持)