是否可以像在Java中那样从C ++中的静态方法返回一个对象?我这样做:
class MyMath {
public:
static MyObject calcSomething(void);
private:
};
我想这样做:
int main() {
MyObject o = MyMath.calcSomething(); // error happens here
}
MyMath类中只有静态方法,因此实例化它没有意义。但是我得到了这个编译错误:
MyMath.cpp:69:错误:在'。'之前预期的primary-expression令牌
我做错了什么?我有来实例化MyMath吗?如果有可能,我宁愿不要。
答案 0 :(得分:74)
使用::
代替.
MyObject o = MyMath::calcSomething();
当您在没有类对象的情况下调用方法时,应使用::
表示法。您也可以通过类对象或指向它们的指针调用静态方法,在这种情况下,您应该使用常用的.
或->
表示法:
MyObject obj;
MyObject* p = new MyObject();
MyObject::calcSomething();
obj.calcSomething();
p->calcSomething();
答案 1 :(得分:12)
我做错了什么?
您只是使用了错误的语法... ::
运算符(scope resolution operator)是您访问不同命名空间中的类或成员的方式:
int main() {
MyObject o = MyMath::calcSomething(); // correct syntax
}
我是否必须实例化MyMath?
没有
答案 2 :(得分:1)
对于这种情况,您需要MyMath :: calcSomething()。 '。'语法用于调用对象中的函数。 ::语法用于调用类或命名空间中的函数。
答案 3 :(得分:1)
致电MyMath::calcSomething()
答案 4 :(得分:1)
试试这种方式
#include <iostream>
using namespace std;
class MyMath {
public:
static MyMath* calcSomething(void);
private:
};
MyMath* MyMath::calcSomething()
{
MyMath *myMathObject=new MyMath;
return myMathObject;
}
int main()
{
MyMath *myMathObject=MyMath::calcSomething();
/////Object created and returned from static function calcSomeThing
}
由于