2010-12-10 3 views
3

두 개의 얽힌 문제가 조금 있습니다.다른 헤더에 선언 된 배열 객체를 가리키는 포인터를 반환하는 메서드

  • 먼저 힙의 개체에 대한 포인터 배열을 갖고 싶습니다. (다른 헤더에 선언 된 객체)

  • 둘째로, 메소드에서 해당 객체 중 하나에 대한 포인터를 반환해야합니다.

내 현재 코드는 약간의 실수로 인한 결과이며 "bar"를 완전히 선언하지 않고 반환 유형으로 사용할 수 없기 때문에 실패합니다. 그러나 나는 그 문제를 해결하는 다른 방법을 볼 수 없다. "getBar"함수에 대한 포인터를 만들려고했지만 그 다음에는 멤버 메서드가 아닌 barArray에 액세스하는 방법을 알지 못합니다.

어떤 도움이 많이 주시면 감사하겠습니다 : D

내 코드 :

foo.h

#ifndef FOO_H 
#define FOO_H 

//forward declaration 
class bar; 

class foo 
{ 
    public: 
     //constructor 
     foo(int x); 
     //method 
     bar * getBar(int y); 
    private: 
     int howManyBars; 
     bar **barArray; 
}; 

#endif 

foo.cpp에

#include "foo.h" 
#include "bar.h" 

//constructor 
foo::foo(int x) 
{ 
    howManyBars = x; 
    barArray = new bar *[howManyBars]; 

    for (int i=0; i < howManyBars ; i++) 
    { 
     barArray[i] = NULL; //set all pointers to NULL 
    } 
} 

//method 
bar * foo::getBar(int y) 
{ 
    y = (y - 1); 
    // if the pointer is null, make an object and return that 
    if (barArray[y] == NULL) 
    { 
     barArray[y] = new bar(); 
    } 
    return barArray[y]; 
} 

bar.h

#ifndef BAR_H 
#define BAR_H 

#include <iostream> 

class bar 
{ 
    public: 
     void test(){std::cout << "I'm alive!\n";}; 
}; 
#endif 
몇 오타 이외
+1

foo의 소멸자에서 객체를 삭제하십시오 =) –

답변

1

이 잘 컴파일 :

  1. 당신은 바 클래스를 정의 이후에 세미콜론이 필요합니다.

  • bar * foo:getBar(int y)

    은 다음과 같아야합니다

    bar * foo::getBar(int y) 
    

    3.

    bar[i] = NULL; //set all pointers to NULL 
    

    가 있어야한다 : 잊지 마세요

    barArray[i] = NULL; //set all pointers to NULL 
    
  • +0

    저의 실례를 저주하십시오! 적어도 그것은 내가 개념을 가지고 있다는 것을 의미한다. 다른 응용 프로그램에서 실행할 때 "ISO C++에서 foo.h에 'bar'형식의 'bar'선언을 허용하지 않습니다. 헤더가로드되어 있지만 그 내용을 볼 수 없습니다. #define 경비원과 관련된 문제 – Shootfast

    관련 문제