我知道三元运算符有一些令人惊讶的限制,但我有点困惑,这无法为我编译:
void foo(bool b)
{
int* ptr = ((b) ? NULL : NULL);
}
Run Code Online (Sandbox Code Playgroud)
显然,这是显示问题所需的最低限度.错误是:
[BCC32 Error] Unit11.cpp(20): E2034 Cannot convert 'int' to 'int *'
Run Code Online (Sandbox Code Playgroud)
编译器是不到100%符合Embarcadero C++ Builder 2010的,因此编译器错误远非不可能......
注意:修改Parens以避免混淆我的意图.
注2:我对自己如何首先得到这个结构感到有些困惑,所以这是我的借口:我在一行上得到了一些编译错误a = b? c : d,其中b,c和d都是复杂的表达式.为了缩小范围,我用s 代替c,以检查是否是罪魁祸首.在这一点上,一切都在手推车里下地狱.dNULLb
c++ conditional-operator null-pointer c++builder-2010 constant-expression
我有一个大型应用程序,最近开始在调试器中运行时表现出相当奇怪的行为.一,基础知识:
OS: Windows 7 64-bit.
Application: Multithreaded VCL app with many dlls, bpls, and other components.
Compiler/IDE: Embarcadero RAD Studio 2010.
Run Code Online (Sandbox Code Playgroud)
观察到的症状是这样的:当调试器附加到我的应用程序时,某些任务会导致应用程序崩溃.这些细节进一步令人困惑:我的应用程序因Windows消息"YouApplication已停止工作"而停止.它有助于向微软发送一个小型转储.
应该注意:当未附加调试器时,应用程序不会崩溃.此外,调试器在应用程序运行时不会指示任何异常或其他问题.
设置和单步执行断点似乎会影响应用程序崩溃的点,但我怀疑这是调试线程而不是有问题的线程的症状.
这些崩溃也发生在我同事的计算机上,我观察到同样的行为.这使我不怀疑在我的计算机上安装了某些东西失败了.遇到此问题的同事也在运行Windows 7 64位.我没有同事没有遇到这个问题.
我从崩溃中收集了一些已分析的完整转储.我发现失败实际上每次都发生在同一个地方.这是来自转储的异常数据(它总是相同的,当然除了ThreadId):
Exception Information
ThreadId: 0x000014C0
Code: 0x4000001F Unknown (4000001F)
Address: 0x773F2507
Flags: 0x00000000
NumberParameters: 0x00000001
0x00000000
Run Code Online (Sandbox Code Playgroud)
Google透露,代码0x4000001F实际上是STATUS_WX86_BREAKPOINT.Microsoft无益地将其描述为"Win32 x86仿真子系统使用的异常状态代码".
这是堆栈详细信息(似乎没有变化):
0x773F2507: ntdll.dll+0x000A2507: RtlQueryCriticalSectionOwner + 0x000000E8
0x773F3DAB: ntdll.dll+0x000A3DAB: RtlQueryProcessLockInformation + 0x0000020D
0x773D2ED9: ntdll.dll+0x00082ED9: RtlUlonglongByteSwap + 0x00005C69
0x773F3553: ntdll.dll+0x000A3553: RtlpQueryProcessDebugInformationRemote + 0x00000044
0x74F73677: kernel32.dll+0x00013677: BaseThreadInitThunk + 0x00000012
0x77389F02: ntdll.dll+0x00039F02: RtlInitializeExceptionChain + 0x00000063
0x77389ED5: ntdll.dll+0x00039ED5: RtlInitializeExceptionChain + …Run Code Online (Sandbox Code Playgroud) 我正在使用Embarcadero RAD Studio 2010(C++).项目文件(.cbproj)有五个不同的标记,包含.bpis或.libs列表.我想了解一些关于链接器如何使用这些库文件列表的信息(使用或不使用运行时包构建时).
LinkPackageImports
LinkPackageStatics
AllPackageLibs
PackageLibs
PackageImports
我想我已经理解了最后一个.它包含可以从IDE中的"项目属性"设置的运行时包列表.
这个问题的动机是我试图从我的应用程序中消除不必要的依赖项..cbproj中的这五个标签似乎都包含各种不同的lib和bpis.我知道我不需要的一些库,以及我认为我不需要的一些库.从某些列表中删除某些库似乎没有任何效果,而从其他列表中删除其他库会导致表单的链接器错误[ILINK32 Error] Fatal: Unable to open file 'FILENAME.OBJ'
我正在慢慢解决所有链接器问题,但是当我在这五个列表中的一个中包含库名称时,确切地知道我告诉链接器要做什么将非常有帮助.
我在TRadioGroup中有两个radiobuttons .他们应该如何工作的所有逻辑都很好.但是TRadioGroup控制器周围有一个框架,我以为我可以使用边框属性或类似的东西删除它.但是控件似乎没有任何与边框/框架有任何相似性的属性.如何将控制器设置为不包含框架?
我使用C++ Builder 2010,我无法弄清楚如何更改键盘快捷键.
从工具>选项>编辑器选项>键映射,有一些键映射模块,我使用"IDE经典模块",但我想更改此模块中的一些快捷方式,是否可能?
我有一个C++ Builder 2010项目,并希望为它添加测试.因此,我不想暂停控制台窗口的输出来读取测试结果,而是希望将相同的信息打印到C++ Builder中的输出窗口(而不是在事件日志中).
所以OutputDebugString对我来说不是一个选择.是否有一些特定的方法可以将控制台输出重定向到输出窗口或直接在那里打印?

我有兴趣尝试在我的应用程序中嵌入Python,让用户在应用程序环境中运行Python脚本,访问内部(C++实现的)对象等.我对此很新,所以不知道到底是什么我正在做.
我已经阅读了在另一个应用程序中嵌入Python,虽然这似乎只涉及C API和平面C函数,而不是类或对象(除非我遗漏了一些东西),它的"在C++中嵌入Python"一节只有两句话.但是,我也遇到过如何使用boost :: python这看起来很棒.
有一个问题:C++ Builder 2010不支持 boost :: python .
因此,考虑到这一点,在使用C++ Builder 2010编译的C++应用程序中嵌入Python的最佳方法是什么,并且使用最好的技术,如何公开/集成类和对象以使Python编码器能够访问对象 -面向程序的内部? 我错过了标准方法吗?将内部类或实例化对象作为对象简单地暴露给Python,或者API是真正的C风格还是平面/非OO,如果是这样,通过这样的API模拟底层OO层的最佳方法是什么?
注意:我实际上使用的是RAD Studio,它包括C++ Builder和Delphi.有可能使用某种特定于Delphi的绑定,但我遇到的是六七年,或者是新的(Python 2.6),但似乎没有任何文档,并且问题列表中的评论如"任何人都在阅读thiese [sic]评论?是否有人参与此项目?"这并不令人鼓舞.但请随意添加特定于Delphi的答案,特别是如果您认为它们可能会在组合的D + CB应用程序中运行.我很欣赏所有答案,即使它们不是很完美 - 我可以研究,我只需要指点去哪里.但是,原生C++解决方案可能是理想的,因为使用VCL派生的对象有其自身的局限性.
感谢您的输入!
我正在搜索小部件或控件来绘制时间序列的数据.基本上绘制图(x,y),其中x和y是Nx1向量.我正在寻找,但没有找到太多,任何建议都会很棒!谢谢.
TVirtualStringTree行为默认情况下,如果它的重点是 - 它会在鼠标滚轮滚动即使鼠标不在控制(除非它是对另一TVirtualStringTree).
是否有一种快速而优雅的方法来禁用此行为?
我已经这样做与OnMouseWheel事件,并检查PtInRect是否Mouse.CursorPos如果是在控制,但我有一种感觉,有一种更好的方式做同样的,因为这样,我不得不定义每个树视图我想补充,也是一个新的事件处理何时聚焦/取消聚焦控件,所以我希望必须有更好的方法来禁用它.
所以要清楚,我希望鼠标滚轮功能像往常一样工作,但只有当鼠标在VirtualTreeView上时.
delphi c++builder virtualtreeview delphi-2010 c++builder-2010
我正在 CodeGear RAD Studio 中使用 decltype 编写一些代码。我尝试过简单的解决方案,它看起来与此没有什么不同:
\n\nint main(int, char**) {\n int i;\n int &ir = i;\n decltype((ir)) ir_clone = ir;\n}\nRun Code Online (Sandbox Code Playgroud)\n\n当然,这无法编译:内部编译器错误。我相当怀疑该代码没有什么特别的错误,并且存在关于引用表达式的编译器错误。(顺便说一句,g++ 的代码没有问题,并且编译得很好。)但这无助于解决问题,因为平台是不可协商的。
\n\n如果上面我写了
\n\n decltype(ir) ir_clone = ir; /* No extra parens */\nRun Code Online (Sandbox Code Playgroud)\n\n它可以按预期编译并工作。然而,问题并没有就此结束,因为这不能正确计算环境的常量性。尤其:
\n\nstruct S { int i; } s;\nconst S* p = &s;\ndecltype(p->i) i0 = s.i; /* i0 is an int */\ndecltype((p->i)) i1 = s.i; /* i1 is a const int& */\nRun Code Online (Sandbox Code Playgroud)\n\n如果我不使用括号使参数成为表达式,我就会失去我需要的参数的常量性。
\n\n我\xc2\xa0可以使用的另一个工具是简单模板,如下所示:
\n\ntemplate<class T> struct unref { …Run Code Online (Sandbox Code Playgroud) c++builder-2010 ×10
c++builder ×8
delphi ×4
c++ ×3
delphi-2010 ×2
c++11 ×1
components ×1
debugging ×1
decltype ×1
dll ×1
embed ×1
exception ×1
ide ×1
linker ×1
null-pointer ×1
python ×1