2012-11-30 2 views
2

헤더 객체 내에 클래스 객체를 선언하려하지만 작동하지 않습니다. 현재 각 기능이 무엇인지 정의하는 2 개의 헤더 파일과 2 개의 cpp 파일이 있습니다. 클래스는 Heltal 및 Array라고하며, 둘 다 자체 헤더 파일 (heltal.h 및 array.h)에 있습니다.클래스 헤더 내에서 클래스 객체 선언 C++

Heltal 클래스 객체를 Array 클래스의 private 부분에 선언하려하지만, 무엇을하더라도 선언 할 방법을 찾을 수 없습니다. 나는 array.h 헤더에 heltal.h 헤더를 포함 시키려고했지만, 다시 정의되는 것에 대해 불평하기 시작한다.

그러나 그것을 array.cpp에서 선언하는 것은 잘 작동하지만 헤더에 정의되어 있습니다. 여기

는 파일이 순간에 같이 작업은 다음과 같습니다

heltal.h

class Heltal { 
    public: 
     Heltal(); 
     Heltal(int tal); 
     ~Heltal(); 

     void set(int tal); 
     bool operator < (const Heltal &heltal) const 
     { 
      return (heltal < heltal.heltal); 
     } 
     bool operator > (const Heltal &heltal) const 
     { 
      return (heltal > heltal.heltal); 
     } 
    private: 
     int heltal; 
}; 

array.h

#include <vector> 
class Array { 
public: 
    Array(); 
    Array(int in); 
    ~Array(); 
    int Random(int min, int max); 
private: 
    Heltal h; 
    int size; 
}; 

두 헤더가 MAIN.CPP에 포함되어

+2

포함 가드를 사용해야합니다. –

답변

3

Heltal.h을안에 넣었을 때 올바른 경로를 따라 시작했습니다..

#ifndef HELTAL_H 
#define HELTAL_H 

class Heltal { 
    ... 
}; 

#endif 

지금 안전하게 Array.h의 상단에 Heltal.h을 포함 할 수 있으며, 문제가 해결됩니다

당신의 헤더에 include guards 추가, 이것은 당신이 중복 흠를 방지하는 데 도움이됩니다.

+0

그걸 고쳤어. 정말 고맙습니다! – Kraffs

0

당신은 array.h 내부 heltal.h을 포함 할 필요가 없지만, 두 파일은 가드를 포함해야합니다 heltal.h에 대한

#ifndef array_h_guard 
#define array_h_guard 

// contents of array.h go here 

#endif // array_h_guard 

와 유사합니다. 이것은 다중 포함을 방지합니다.

array.h에서 heltal.h 만 포함하면됩니다. 즉, 즉각적인 문제는 해결되지만 포함 경비원은 안전합니다.

1

c/cpp 파일을 컴파일 할 때 포함 된 파일은 먼저 c/cpp 파일에서 확장됩니다. 일부 수업은 올바른 순서로 진행되어야합니다. 예 : Heltal은 반드시 배열 앞에 있어야하므로 포함 순서에서이를 보장해야합니다.

관련 문제