2009-07-30 14 views
29

Czy jest możliwe zwrócenie obiektu z metody statycznej w C++, tak jak w Javie? Robię to:Pomoc w statycznej metodzie C++

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

I chcę to zrobić:

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

Istnieją metody tylko statyczne w klasie MyMath, więc nie ma sensu go instancji. Ale pojawia się ten błąd kompilacji:

MyMath.cpp: 69: błąd: oczekiwane wyrażenie podstawowe przed "." token

Co robię źle? Czy mam mieć do tworzenia instancji MyMath? Wolałbym nie, jeśli to możliwe.

Odpowiedz

73

Użyj :: zamiast .

MyObject o = MyMath::calcSomething();

Podczas wywoływania metody bez obiektu klasy należy użyć notacji ::. Można również wywołać metodę statyczną poprzez obiektów klasy lub wskaźniki do nich, w tym przypadku należy użyć zwykłej . lub -> notacji:

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

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

+1 dla zauważyć, że nadal można wywołać funkcję statycznego poprzez obiektowego> notacji. –

12

What am I doing wrong?

Jesteś po prostu za nieprawidłową składnię ... operator :: (scope resolution operator) to w jaki sposób uzyskać dostęp do klas lub członków w różnych przestrzeniach nazw:

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

Do I have to instantiate MyMath?

nr

1

W tym przypadku chcesz MyMath :: calcSomething(). "." składnia służy do wywoływania funkcji w obiektach. Składnia :: służy do wywoływania funkcji w klasie lub w przestrzeni nazw.

1

połączeń MyMath::calcSomething()

1

Spróbuj ten sposób

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

Dzięki

Powiązane problemy