32

是否可以像在 Java 中一样从 C++ 中的静态方法返回对象?我正在这样做:

class MyMath {
    public:
       static MyObject calcSomething(void);
    private:
};

我想这样做:

int main() { 
    MyObject o = MyMath.calcSomething(); // error happens here
}

MyMath 类中只有静态方法,因此实例化它没有意义。但我得到这个编译错误:

MyMath.cpp:69:错误:“。”之前的预期主表达式 令牌

我究竟做错了什么?我必须实例化 MyMath 吗?如果可能的话,我宁愿不这样做。

4

5 回答 5

82

使用::代替.

MyObject o = MyMath::calcSomething();

当你调用没有类对象的方法时,你应该使用::符号。您还可以通过类对象或指向它们的指针调用静态方法,在这种情况下,您应该使用通常的.->表示法:

MyObject obj;
MyObject* p = new MyObject();

MyObject::calcSomething();
obj.calcSomething();
p->calcSomething();
于 2009-07-30T19:40:30.267 回答
12

我究竟做错了什么?

您只是使用了不正确的语法......::运算符(范围解析运算符)是您访问不同命名空间中的类或成员的方式:

int main() { 
    MyObject o = MyMath::calcSomething(); // correct syntax
}

我必须实例化 MyMath 吗?

不。

于 2009-07-30T19:40:29.847 回答
1

对于这种情况,您需要 MyMath::calcSomething()。这 '。' 语法用于调用对象中的函数。:: 语法用于调用类或命名空间中的函数。

于 2009-07-30T19:40:32.983 回答
1

称呼MyMath::calcSomething()

于 2009-07-30T19:40:33.263 回答
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   
}

谢谢

于 2013-05-23T15:06:49.413 回答