我正在尝试在C ++ Builder中创建一个简单的Form,我正在尝试在类中创建一个adding()
方法,但如果可以的话,我不想创建一个对象只是为了使用一个不保存任何值的方法。
这是类文件的来源:
class Op{
public:
double adding(double x, double y);
};
double Op::adding(double x, double y){
return x + y;
}
这是调用按钮的动作:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
double value1 = text1->Text.ToDouble();
double value2 = text2->Text.ToDouble();
double result = Op.adding(value1, value2);
}
但是我收到编译错误:
不正确使用typedef'Op'
如果我必须创建像Op operations;
这样的对象,请告诉我如何。
答案 0 :(得分:6)
对于您的尝试,请将adding()
声明为static
:
class Op{
public:
static double adding(double x, double y);
};
然后你可以这样称呼它:
double result = Op::adding(value1, value2);
如果你没有将其声明为static
,你确实需要先创建一个对象,例如:
Op operation;
double result = operation.adding(value1, value2);
或者:
double result = Op().adding(value1, value2);
或者,如果使用C ++ Builder之一Clang-based compilers:
double result = Op{}.adding(value1, value2);
答案 1 :(得分:3)
通常,如果您只是在类中定义函数而没有数据,那么最好考虑使用名称空间而不是类。请参阅此主题:Using a function pointer from one class in a function of another class
在这种情况下,您可以考虑以下设计:
namespace Op{//this will go into a header file
double adding(double x, double y){
return x + y;
}
//define other functions as required
};
//usage in .cpp implementation file
//include the header file containing the namespace
void __fastcall TForm1::Button1Click(TObject *Sender)
{
double value1 = text1->Text.ToDouble();
double value2 = text2->Text.ToDouble();
double result = Op::adding(value1, value2);
}