2012-07-16 71 views
0

遇到我正在处理的一些代码的问题。此代码正在基于Linux的系统上运行,并且收到的错误如下: /root/cvswork/pci_sync_card/Code/SSBSupport/src/CRCWbHfChannel/CRCWbHfMSBSimulator.cpp:447: virtual void CCRCWbHfMSBSimulator :: Process( ):声明'pcBasebandOutput'失败。声明在C++问题中失败

我试着通过这段代码来找出为什么这是失败的,我似乎无法弄清楚。不幸的是,我有太多的文件来分享这里的代码(单步执行pcBasebandOutput分配需要相当长的时间)。我知道这是一个比真正被问到的更复杂的问题。我的主要问题是这些:

  1. 是我断言(pcBasebandOutput);必要的代码行?我只问,因为在Visual Studio上运行此代码时,我的程序的结果是可取的。
  2. 当它正在评估我的pcBasebandOutput变量时,为什么它评估为false?这是说没有值实际分配给pcBasebandOutput?或者可以赋值给它,但它不是正确的类型(指向两个变量的结构的指针,它们都是双精度的)?

谢谢!

+0

如果有人能解释为什么我也收到downvote以及,那将不胜感激。第二次它发生在我这个网站上,没有任何解释。如果你不喜欢我的问题,请告诉我我做错了什么,所以我不再做。 – TZPike05 2012-07-16 14:23:25

+2

我认为大多数人可以帮助你宁愿有一些代码比个人背景。 – 2012-07-16 14:24:26

+1

后moar代码。 – Wug 2012-07-16 14:24:52

回答

1

assert检查逻辑条件。如果条件是false,则论文失败。所以写assert(cond)在逻辑上是一样的文字:

if (!cond) 
{ 
    assert(false); 
} 

我不建议你从代码中删除assert,因为它是一个后卫​​告诉你的东西就不是它的目的是要走的路。而且这不是神的想法只是忽略,因为它可能会拍你的腿后

+0

谢谢@安德鲁。我有一种感觉,即使程序在Visual Studio上有适当的输出,也不应该因为这个确切原因而将其删除。 就逻辑条件而言,我明白你在说什么,但是我还有点不清楚(这可能是我不明白你在说什么,如果我是),它实际上在逻辑上比较了pcBasebandOutput至。它只是检查它是否存在?或者,如果它是正确的数据类型?我很抱歉,如果这似乎是一个愚蠢的问题。 – TZPike05 2012-07-16 14:24:30

+0

@ TZPike05:在Visual Studio中运行程序时,我认为声明正常 – Andrew 2012-07-16 14:26:08

+0

这行只是'assert(pcBasebandOutput)'?这可能是一个空指针检查,而不是查看'pcBasebandOutput'内的任何内容。 – BoBTFish 2012-07-16 14:48:03

1
  1. 只有你可以知道,

  2. 什么是pcBasebandOutput的类型?也许它没有正确初始化?

声明主要目的是让您的IDE在assert命中的地方进入调试会话。从那里你可以读取所有变量并查看callstack /线程。其他解决方案(比使用调试器)要增加大量日志记录,这些日志记录在线程环境中可能会导致问题(日志记录非常慢)。

+0

pcBasebandOutput是一个指向标题为COMPLEX的结构的指针,它有两个变量,它们都是双精度的。我想初始化可能是错误的,但我会认为它会在Visual Studio上失败,当我在那里运行它。 – TZPike05 2012-07-16 14:36:31