2011-10-28 2 views
5

이전에 만들었던 다른 클래스의 객체 배열을 처리 할 클래스가 있습니다 (잘 작동합니다). 문제는 List 클래스의 개체를 만들려고 할 때 나타납니다.오류 설명 : ISO C++은 타입이없는 Personlist의 선언을 금지합니다.

#ifndef personlistH 
#define personlistH 
#include "Person.h" 
#include <iomanip> 
#include <iostream> 
#define SIZE 10 

namespace std { 

    class PersonList { 
private: 
    Person persons[SIZE]; 
    int arrnum; 
    string filename; 

public: 
    Personlist(); 
    }; 
} 
#endif 

이 주요 기능이다가 :

error: "27 \PersonList.h ISO C++ forbids declaration of `Personlist' with no type"

: 내 컴파일러는 나를주고있다 오류는 다음
#include <iostream> 
#include "PersonList.h" 

using namespace std; 

int main() { 

PersonList personlist; 

return 0; 
} 

입니다

목록 클래스의 헤더입니다

나는 답을 찾았지만 C++을 처음 접했을 때 조금 혼란스러워서 피팅을 찾지 못했습니다. 아직. 이 오류를 설명해 주시면 대단합니다.

답변

7

PersonList 대신 Personlist에 오타가 있다는 것입니다 귀하의 생성자 선언에 대문자. Personlist();이 있지만 PersonList();이 필요합니다. 가지고있는 것은 클래스 이름과 같지 않기 때문에 생성자 라기보다는 함수로 간주되며 함수에는 반환 유형이 필요합니다.

+2

그리고 네임 스페이스 std에 자신 만의 타입을 넣는 것을 멈춰야합니다. 이것은 금지되어 있습니다. – RobH

+0

고마워요. :). 그러나 오류가 여전히 있습니다. – Ms01

+0

수정 : 다른 오류가 발생합니다. 죄송합니다. "22 PersonList.h Person은"원래 사람 클래스와 관련이있을 것 같은 추측입니까? " – Ms01

4

자신의 유형을 표준 네임 스페이스 (std)에 추가하지 말고 대신 자신의 네임 스페이스를 만들고 그 안에 클래스를 정의하십시오.

//PersonList.h

namespace PersonNamespace 
{ 
    class PersonList 
    { 
     //members here 
    }; 
} 

//Main.cpp

using namespace PersonNamespace; 

실제 오류는 당신은 잘못이

+0

이렇게하면 비슷한 것을해야합니다. namespace x {class bla bla} .... 다음 네임 스페이스 x를 사용합니다. ? – Ms01

+0

@cubsink : 예. 제발 대답 업데이트 된 내용을 참조하십시오. –

+0

좋은 조언이지만 오류를 수정하지는 않습니다. –

2

오류는 생성자를 선언 할 때 대문자를 잘못 입력했기 때문에 발생합니다. PersonList()이 아니라 Personlist()이어야합니다.

또한 std 네임 스페이스에서 자신의 클래스를 선언하면 안됩니다. 표준 라이브러리 용으로 예약되어 있습니다. 당신은 자신의 네임 스페이스 이름을 만들어 그 안에 물건을 넣습니다.

관련 문제