배열

2012-04-23 2 views
0

내가 객체의 배열 동적 메모리를 할당하기 위해 노력하고있어,하지만 다음과 같은 오류가 계속 :배열

"오류 : C2143 : 구문 오류 : 실종 ';' '*'이전에 '*' " "오류 : C2501 : 'FIGura': 저장 클래스 또는 형식 지정자가 누락되었습니다. "

모든 도움을 환영합니다. 나는 Visual Basic에서 C++ 2006를 사용하고 있지만 :(작업 graphics.h 얻을 터보 C++ 3.0 도스 박스로 전환됩니다 여기

코드입니다 :.이 라인에서

#include<iostream.h> 

class Grup { 
    private: 
     int nr_elemente; 
     Figura *figuri; 
    public: 
     Grup() { 
      figuri = new Figura[nr_elemente]; 
     } 
}; 


class Figura { 

public: 
    Figura(); 
    ~Figura(); 
    Figura(const Figura&); 

    friend Figura operator+(const Figura& fig1, const Figura& fig2) {}; 
    friend Figura operator+(const Grup& gr1, const Grup& gr2) {} 

    friend Figura operator*(const Figura& fig) {} 
    friend Figura operator*(const Figura& fig) {} 

}; 

Figura operator+(const Figura& fig, const Grup& gr) { 
    return fig; 
} 

class Punct : Figura 
{ 
public: 
    int x, y; 

    Punct(int x, int y) { 
     Punct::x = x; 
     Punct::y = y; 
    } 
}; 

class Segment : Figura 
{ 
public: 
    int x, y, poz; 
}; 

class Dreptunghi : Figura 
{ 
public: 
    int x, y, poz; 
}; 

void main(void) { 



} 
+0

터보 C++ 3.0은 1991 년부터입니다. 아무 것도 권장하지 않습니다. –

+0

내 선생에게 말해주세요 :) – BebliucGeorge

답변

2

:

figuri = new Figura[nr_elemente]; 
.

컴파일러는 클래스 Figura는 따라서, "Figura"때문에 오류가 발생하는 시점에서 알 수없는 토큰 존재한다는 것을 모르는 당신은 앞으로 선언을 사용해야합니다.

컴파일러는 클래스 Figura의 크기를 알지 못하므로이 유형의 개체 배열을 할당 할 수 없습니다. 따라서 포인터를 사용하거나 클래스 디자인을 수정해야 할 것입니다.

+0

지금 내가하고있는 것 대신 포인터를 어떻게 사용할 수 있습니까? – BebliucGeorge

+1

새로운 피처 클래스가 필요하지 않습니까? – juanchopanza

+1

좋아요, 나는 Figura를 앞으로 선언했지만, 이제는 "적절한 기본 생성자를 사용할 수 없습니다." figuri와 함께 = 새로운 Figura [nr_elemente]; – BebliucGeorge

0

모든 파일을 하나의 파일로 처리하려고하면 문제가 발생합니다. .hpp.cpp 파일을 구분하기 위해 클래스의 선언과 정의를 이동하면 이러한 종류의 문제가 발생하지 않습니다. grup.hpp 파일에

// file grup.hpp 

class Figura; // forward declaration 

class Grup { 
private: 
    int nr_elemente; 
    Figura *figuri; 
public: 
    Grup(); 
}; 

이동 . 그런 다음 group.cpp 파일에 Grup의 생성자를 구현합니다

// file grup.cpp 
#include "grup.hpp" 
#include "figura.hpp" 


Grup::Grup() 
{ 
    figuri = new Figura[nr_elemente]; 
} 

또한 figura.hppfigura.cpp 파일 상응하는 Figura 클래스의 정의와 선언을 이동합니다. 자신이 가지고있는 모든 수업에서 동일한 접근 방식을 사용하는 것이 더 좋습니다.

0

앞서 언급 한 선언을 전달해야하지만 충분하지는 않습니다. 클래스를 구현으로 사용하려면 클래스의 크기를 알아야합니다. 그들은 당신이 다른 클래스가 구현 (또는 신고) 된 후 실행하는 데 필요한 같은 파일에 있기 때문에 따라서 ... 수업 후

class Figura; 
class Grup{ 
    Figura * figuri; 
    //.. other stuff, but ONLY declarations no implementations. 
}; 

class Figura 
{ 
    //Same as you already have... 
}; 

이 선언되었다.

//Still same file but below the Figura class definition.. 
Grup::Grup() { 
    //Now you can use Figura... 
    figuri = new Figura[nr_elemente]; 
} 

@be 당신이 당신의 의견을 함께보고있는 문제는 아래 그림 클래스의 대입 연산자과 관련이있다.

연산자는 다음과 같습니다. 그림 & operator = (const Fig &);

하지만 사용자의 예를 사용하면 포인터 공극 FUNC (CONST도 *도) {// ... figcontainer [지수 =도 할당된다; // 당신이 그랬다면 * 무화과; 당신은 괜찮을거야 // ...
}

+0

나는 약간의 디자인을 바꾸 었으며 거의 ​​모든 것이 작동합니다. 유일한 문제는 동적 메모리 할당 권한을 제대로 수행하지 않는 것입니다. 오류 : C2679 : 바이너리 '=': 'FIGura *'유형의 오른쪽 피연산자를 사용하는 연산자가 정의되지 않았습니다. 그 줄은 다음과 같습니다 : void adauga_element (Figura * fig) { \t \t \t figuri [nr_elemente ++] = fig; \t \t}. – BebliucGeorge