标签: c++builder

在 C++ Builder 类中定义默认函数参数和参数太少错误

我有一个定义带有默认参数的函数的类。只要函数定义在调用它的函数之前的头文件中,它就可以正常工作。

但是,如果我在调用函数 C++ Builder (2010) 报告参数太少错误后移动它。

标题可能是例如:

class TSomething
{
public:
void CallingFunction();
void Function(int a);
}
Run Code Online (Sandbox Code Playgroud)

和 cpp 文件可能是:

#include "Header.h"

TSomething::CallingFunction()
{
Function(); // "Too few arguments" here...
}

TSomething::Function(int a = 123)
{
//... some code here ...
}
Run Code Online (Sandbox Code Playgroud)

因此,如果调用函数在“函数”之前,它会报告参数太少。我不明白为什么,因为它在 cpp 文件的 #include 语句中包含函数定义。谁能告诉我如何重新排列它以便它正确接受默认参数?我可以将 Function(int a) 移到 CallingFunction 上方以使其工作到此为止。

c++ c++builder c++builder-2010

1
推荐指数
1
解决办法
1871
查看次数

常量char继续转换为int

Stackoverflow用户!
我正在使用Borland C++ Builder 6来创建我的程序.是的,我知道它已经过时了两年,但是,我必须使用这个IDE.我有一个我需要拆分的字符串.所以我使用以下方法:

void Orders::split(TStringList* lout, char* str, const char* separator) {
  for(char* tok = strtok(str, separator); tok!=NULL; tok = strtok(NULL, separator))
      lout->Add(tok);
}
Run Code Online (Sandbox Code Playgroud)

另外,我有一个定义为预处理器常量的分隔符:

#define SEPARATOR ':'
Run Code Online (Sandbox Code Playgroud)

然后我调用split方法

split(ords, input.c_str(), SEPARATOR);
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

[C++错误] File3.cpp(47):E2034无法将'int'转换为'const char*'

在线上,我称之为split方法.转换为const char*会导致相同的结果.IDE中是否存在错误,或者我是否因为在代码中看到自己的错误而愚蠢?
提前致谢!

c++ c++builder

1
推荐指数
1
解决办法
233
查看次数

是否可以缩短此声明?

是否有可能缩短此声明,因为我在代码中经常使用它

例如,我使用它来强制转换ObjectCustomObject使用

dynamic_cast/static_cast<TCustomClassName*>(SenderObject)
Run Code Online (Sandbox Code Playgroud)

有没有可能缩短使用typedef static_cast<TCustomClassName*>或类似的东西,以确保可以使用演员操作typedef

c++ c++builder c++builder-2010

1
推荐指数
1
解决办法
274
查看次数

为什么我不能在 C++ Builder 中编译 IsNan

我正在使用 C++ Builder XE 并想检查浮点值是否有效。根据帮助,在math.h中,有一个调用

bool IsNan(float value)
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试编译它时,它告诉我

Call to undefined function 'IsNan'
Run Code Online (Sandbox Code Playgroud)

查看 math.h,没有 isnan 这样的东西(我使用了不区分大小写的搜索)

我是在做傻事还是什么?

c++ math c++builder

1
推荐指数
1
解决办法
1136
查看次数

C样式转换是否会添加程序集(代码),还是仅供编译器了解情况?

Class A 
{
public:

A *GetA(void) { return a; }

protected:

A *a;

};

Class B : public A
{
public:

B *GetB(void) { return (B*)a; }

};
Run Code Online (Sandbox Code Playgroud)

在AI类中,假设编译器(理想情况下)将优化并将getter内联到与直接访问变量无关的代码?

在B类中,变量被转换为B.这纯粹是为了编译器还是这也涉及到代码?对于B中的功能,汇编指令是否相同?

c++ class c++builder

1
推荐指数
2
解决办法
693
查看次数

打印机不会自动打印。我必须点击确定按钮

每次打印一页或多页时,我都会收到一条消息,提示装入纸盘 1按 OK以使用可用介质。

当我点击确定打印机将只打印一个页面,则需要几秒钟之前,我可以打OK再打印另一页。

如果我想要打印同一文档的多页,并且使用TQRCompositeReport组件往往会发生这种情况,这将非常耗时。

printing delphi quickreports c++builder page-size

1
推荐指数
1
解决办法
1万
查看次数

我是否要在c ++中创建一个使用类方法的Object?

我正在尝试在C++ Builder中创建一个简单的Form,我正在尝试adding()在类中创建一个方法,但如果可以的话,我不想创建一个对象只是为了使用一个方法而不是'保存任何值.

这是类文件的来源:

class Op{
public:
    double adding(double x, double y);
};

double Op::adding(double x, double y){
    return x + y;
}
Run Code Online (Sandbox Code Playgroud)

这是调用按钮的动作:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    double value1 = text1->Text.ToDouble();
    double value2 = text2->Text.ToDouble();
    double result = Op.adding(value1, value2);
}
Run Code Online (Sandbox Code Playgroud)

但我得到一个编译错误:

不正确使用typedef'Op'

如果我必须创建对象Op operations;,请告诉我如何.

c++ class c++builder

1
推荐指数
1
解决办法
92
查看次数

如何枚举TCategoryPanel所持有的所有控件?

我有一个TCategoryPanelGroup,它包含一个TCategoryPanel(名为CatPan).CatPan包含3个列表框.

我想自动调整CatPan的大小以匹配它包含的3个列表框的高度.但CatPan没有AutoSize属性.因此,我需要枚举列表框以获得它们的高度.

但是,当我尝试枚举3个列表框时,我什么也得不到:

for i= 0 to CatPan->ControlCount-1 do CatPan[i].Height;
Run Code Online (Sandbox Code Playgroud)

因为CatPan.ControlCount返回1而不是3!似乎CapPan不是列表框的父级.可能它是这样做的,以便能够进行折叠/展开动画.

我调用lbox1-> Parent-> Name(lbox1是其中一个列表框)来查看谁是其父级,但它返回一个空字符串.

delphi c++builder

1
推荐指数
1
解决办法
192
查看次数

如何知道已经完成了多少任务?

在 C++ Builder 10.3.3 中,我使用以下测试代码:

int count = 500;
 _di_ITask* task = new _di_ITask[count];
ProgressBar1->Position = 0;
for(int i = 0; i < count; i++){
    task[i] = TTask::Create([i, this](){
        // do something...
        Sleep(10);
    });
    task[i]->Start();
    //ProgressBar1->Position = numberOfFinishedTasks;
    //Application->ProcessMessages();
}
TTask::WaitForAll(task, count - 1);
Run Code Online (Sandbox Code Playgroud)

在这种情况下,有 500 个测试任务,我希望我的 ProgressBar 组件显示当前已完成任务的数量。我不知道如何获得这些信息。谢谢!

delphi c++builder

1
推荐指数
1
解决办法
193
查看次数

在 C++ Builder 中隐藏控制台窗口

我使用 Embarcadero C++ 10.2 'Tokyo' 命令行编译器作为一个小尺寸编译器,它以压缩形式分发并且易于“便携”。

我正在尝试Close Tray使用 Win32 API实现这个小程序。

#include <windows.h>

int main()
{
  mciSendString("Set CDAudio Door Closed Wait", 0, 0, 0); 
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

使用编译它可以bcc32c Close.cpp正常工作,但是当双击可执行文件时,控制台窗口会出现。有没有办法取消它的存在,就像/SUBSYSTEM:WINDOWS与 Microsoft 编译器一起使用的那样。

更新:例如,为了做到这一点Digital Mars,我使用编译源文件,sc source.c然后Optlink像这样使用它的链接器

link source.obj,,,winmm.lib /subsystem:windows

因为在 Digital Mars 中编译它是不够的,它需要链接到winmm.lib而 Embarcadero 的编译器会自动执行此操作。

更新 2:我还看到了一个选项-tW,可以为 Windows 制作目标可执行文件,但它没有用,所以正在使用,bcc32x -mwindows 因为它基于 Clang 并且仍然没有得到所需的结果。

compilation c++builder

1
推荐指数
1
解决办法
200
查看次数