以下代码演示了Turbo C++ Explorer项目中的一个奇怪问题.超出范围后,D :: D()中的三个堆栈对象之一不会被销毁.
只有在发布模式下编译时才会发生这种情况,auto_ptrs a_和b_属于不同类型,抛出的异常不会从std :: exception继承.它似乎在VC++ 2005和C++ Builder 2009中工作正常.我确实安装了BDS2006 Update 2,修补程序汇总和修补程序12.
是我的代码还是编译器?你知道修复吗?无法在VCL项目中可靠地使用auto_ptr会非常不方便.
#include <memory>
#include <stdexcept>
#include <iostream>
typedef std::exception my_error; // will work fine if replaced with line below
//class my_error : public std::exception {};
class A {};
class B {};
class C
{
public:
C(int id) : id_(id) { std::cout << "C::C() " << id_ << std::endl; };
~C() { std::cout << "C::~C() " << id_ << std::endl; };
private:
int id_;
};
class D …Run Code Online (Sandbox Code Playgroud) 以下代码段给出了警告:
[C++ Warning] foo.cpp(70): W8030 Temporary used for parameter '_Val' in call to 'std::vector<Base *,std::allocator<Base *> >::push_back(Base * const &)'
Run Code Online (Sandbox Code Playgroud)
..在指定的行上.
class Base
{
};
class Derived: public Base
{
public:
Derived() // << warning disappears if constructor is removed!
{
};
};
std::vector<Base*> list1;
list1.push_back(new Base);
list1.push_back(new Derived); // << Warning on this line!
Run Code Online (Sandbox Code Playgroud)
编译器是Codegear C++ Builder 2007.
奇怪的是,如果Derived的构造函数被删除,警告就会消失......是我还是编译器?
编辑:我发现删除警告的唯一方法是类似于此:
Derived * d;
list1.push_back(d = new Derived); // << No warning now...
Run Code Online (Sandbox Code Playgroud) 我有兴趣尝试在我的应用程序中嵌入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派生的对象有其自身的局限性.
感谢您的输入!
我有一些组件(alpha控件)我可以将它们安装到Delphi或C++ builder它运行良好.但是当我安装Delphi版本的软件包时,我不能在C++ Builder表单中使用组件,而当我安装C++ Builder软件包时,我无法将组件放到Delphi表单中.
我想创建一个新的C++构建器项目并添加一些Delphi表单然后我必须通过C++构建器表单和Delphi表单同时使用这些组件.
某些组件可在VisionLab组件等两种环境中使用.VisionLab附带一个安装程序软件,可以在C++和Delphi中安装VisionLab,但我必须从源代码安装Alpha控件.
最后,我使用RAD studio XE Architect.Alpha控制版本7.26.
我正在搜索小部件或控件来绘制时间序列的数据.基本上绘制图(x,y),其中x和y是Nx1向量.我正在寻找,但没有找到太多,任何建议都会很棒!谢谢.
刚刚开始测试FireMonkey,无法找到制作动态大小/定位组件的方法.
VCL有Anchor属性,FM没有.
有人看到我错过的东西
更新:
FM中没有简单的锚定功能.您必须创建TLayouts并对齐它们,然后将控件放在面板中以使它们"粘住".如果您使用的是旧版本的Builder或Delphi,这将与我们以前与TPanels相同.
关键字__super是Microsoft特有的.它用于访问父类的虚方法.您是否知道borland c ++/delphi编译器的替代关键词?
class MyBaseClass
{
virtual void DoSomething();
};
class MyDerivedClass : public MyBaseClass
{
virtual void DoSomething();
};
void MyBaseClass::DoSomething()
{
// some code
}
void MyDerivedClass::DoSomething()
{
__super::DoSomething(); // calls implementation of base class - no need to know name of base class
// implementation specific to derived class adding new functionality
}
Run Code Online (Sandbox Code Playgroud) 编译(制作或构建)通常需要几秒钟或几分钟.
我想设置我的IDE,RAD Studio XE2,在完成编译时播放声音.如果我可以在编译成功或失败的情况下设置不同的声音,那就更好了.
c ++ Builder xe5 [ilink32错误]错误:无法执行链接[ilink32警告]警告:检测到错误(LME288)
当我试图在Windows XP上编译测试项目c ++ builder xe5时发生的事情
我的环境:C++ Builder XE4
FormB是否可以知道FormB是用Show()还是ShowModal()显示的?
在FormA:
void __fastcall TFormA::Button1Click(TObject *Sender)
{
FormB->Show();
// FormB->ShowModal();
}
Run Code Online (Sandbox Code Playgroud)
在FormB:
void __fastcall TFormB::FormShow(TObject *Sender)
{
// with some if sentence to know Show() or ShowModal()
}
Run Code Online (Sandbox Code Playgroud) c++builder ×10
delphi ×7
c++ ×3
components ×2
audio ×1
delphi-xe2 ×1
destructor ×1
embed ×1
firemonkey ×1
python ×1
warnings ×1