2009-07-30 42 views
29

Có thể trả về một đối tượng từ một phương thức tĩnh trong C++ giống như trong Java không? Tôi làm điều này:Trợ giúp với phương pháp tĩnh C++

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

Và tôi muốn làm điều này:

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

Có nhiều phương pháp chỉ tĩnh trong lớp MyMath, do đó không có điểm trong instantiating nó. Nhưng tôi nhận được lỗi biên dịch này:

MyMath.cpp: 69: error: biểu thức chính được mong đợi trước '.' token

Tôi đang làm gì sai? Tôi có để khởi tạo MyMath không? Tôi thà không, nếu có thể.

Trả lời

73

Sử dụng :: thay vì .

MyObject o = MyMath::calcSomething();

Khi bạn gọi phương thức mà không có đối tượng của lớp, bạn nên sử dụng ký hiệu ::. Bạn cũng có thể gọi phương thức tĩnh thông qua các đối tượng lớp hoặc gợi ý cho họ, trong trường hợp này bạn nên sử dụng thường . hoặc -> ký hiệu:

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

MyObject::calcSomething(); 
obj.calcSomething(); 
p->calcSomething(); 
+8

1 cho lưu ý rằng bạn vẫn có thể gọi một hàm tĩnh thông qua object-> ký hiệu. –

12

What am I doing wrong?

Bạn chỉ đơn giản là sử dụng cú pháp không chính xác ... những :: điều hành (scope resolution operator) là cách bạn sẽ truy cập vào các lớp học hay các thành viên trong không gian tên khác nhau:

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

Do I have to instantiate MyMath?

số

1

Đối với trường hợp này, bạn muốn MyMath :: calcSomething(). Các '.' cú pháp là cho các chức năng gọi trong các đối tượng. Cú pháp :: là để gọi các hàm trong một lớp hoặc một vùng tên.

1

Gọi MyMath::calcSomething()

1

Hãy thử cách này

#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 
} 

Cảm ơn

Các vấn đề liên quan