2009-07-30 5 views
29

Java에서와 같이 C++에서 정적 메서드에서 개체를 반환 할 수 있습니까? 나는이 일을하고있다 :C++ 정적 메서드 도움말

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

그리고 나는이 작업을 수행하려면 다음 MyMath 클래스의 정적 방법이 있습니다

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

때문에 인스턴스화 이유가 없다. 하지만이 컴파일 오류가 발생합니다.

MyMath.cpp : 69 : 오류 : '.'앞에 예상되는 기본 표현식. 토큰

내가 뭘 잘못하고 있니? 이 있으면 MyMath가 인스턴스화됩니까? 나는 그것이 가능하다면 오히려하지 않을 것이다. 당신은 단순히 잘못된 구문을 사용하는

답변

73

. 대신 ::을 사용하십시오.

MyObject o = MyMath::calcSomething();

클래스 개체없이 메서드를 호출 할 때는 :: 표기법을 사용해야합니다. 또한, 그들에게 클래스 객체 또는 포인터를 통해 정적 메소드를 호출 할 수있다이 경우 평소 . 또는 -> 표기법을 사용한다 :이 경우를 들어

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

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

일을보십시오. –

12

What am I doing wrong?

... :: 연산자 (scope resolution operator)는 서로 다른 네임 스페이스의 클래스 또는 멤버에 액세스 할 방법은 다음과 같습니다

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

Do I have to instantiate MyMath?

번호

1

을, 당신은 MyMath :: calcSomething()합니다. '.' 구문은 객체에서 함수를 호출하기위한 것입니다. :: 구문은 클래스 또는 네임 스페이스에서 함수를 호출하는 데 사용됩니다. MyMath::calcSomething()

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 
} 

감사

1