2013-08-06 2 views
0

그래서 지난 몇 주 동안 C++을 배우려고 노력했습니다. 나는 C++로 코딩 할 때 자바 로직에서 생각하는 경향이있다.클래스 자체를 매개 변수로 전달

그래서 자바에서이 코드를 가지고 말 : 내가는 foobar의 인스턴스를 만들 때, 나는는 foobar 생성자에, 그것은에서 인스턴스화 된 엔티티 클래스를 전달하려는

public class Entity { 
    public Entity(){ 
     Foobar foobar = new Foobar(this); 
    } 

    public void randomMethod(){ 
     System.out.println("I am an entity"); 
    } 
} 

public class Foobar{ 
    public Foobar(Entity e){ 
     e.randomMethod(); 
    } 
} 

. 나는 C++에서 같은 코드를 얻는데 어려움을 겪고있다.

편집 기본적으로 다른 클래스에서 인스턴스화 한 객체에 컨테이너 클래스에 대해 알리고 싶습니다.

+2

이미 작성된 C++ 코드가 있습니까? 그래서 우리가 거기에서 일할 수 있니? –

+1

코드가 OOME이됩니다. –

+1

그 코드는 의미가 없습니다. StackOverflow 때까지 반복적으로 자신을 호출합니다. – splungebob

답변

0

Java와는 달리 (보이지 않습니다.) C++에서는 pointers으로 표시해야합니다.

기존 개체를 참조하려면 해당 메서드를 호출 할 때 &을 추가해야하고 포인터가 포인터임을 나타 내기 위해 * 매개 변수를 지정해야합니다.

public: Foobar(Entity* e) 
{ // logic here 
} 

public: Entity() { 
    Foobar foobar = new Foobar(this); 
} 
+0

Java와 C++ 사이에 우스운 것처럼 보입니다 ... 그리고 아마도 '& this'를 원하지 않을 것입니다 - '이만하면 충분 해. –

+0

'&'는 일반 메모리 포인터 전달에 사용됩니다. – bas

+3

'public' 다음에는 콜론이 와야합니다. 'this'는 포인터입니다. '& this'는 포인터의 주소입니다. '이건 부적당하다. 따라서 귀하의 코드는 유효하지 않습니다. –

1

이것은 Java 코드의 C++ 버전입니다. 희망이 도움이됩니다.

class Entity { 
public: 
    Entity(); 
    void randomMethod(); 
}; 

class Foobar : public Entity { 
public: 
    Foobar(Entity *e); 
}; 

Foobar::Foobar(Entity *e) { 
    e->randomMethod(); 
} 

Entity::Entity() { 
    Foobar *foobar = new Foobar(this); 
} 

void Entity::randomMethod() { 
    std::cout << "I am an entity"; 
}