2013-07-31 4 views
0

나는이 오류 메시지를 봤지만 내 경우에 관계를 찾을 수 없습니다. 구문 오류 : 식별자 'MercedesFactory`?

내가 할 시도한 cars abstract factory : 라인에

error C2061: syntax error : identifier 'MercedesFactory' 
error C2061: syntax error : identifier 'AudiFactory' 
error C2061: syntax error : identifier 'SkodaFactory' 

: 나는 3 오류가있어

#include <iostream> 
using namespace std; 

class IFactory 
{ 
public: 
    enum FACTORIES { MERCEDES, AUDI, SKODA }; 
    virtual const char* getCar() = 0; 
    static IFactory* createFactory(FACTORIES factory) 
    { 
     if(factory == MERCEDES) 
      return new MercedesFactory; 
     if(factory == AUDI) 
      return new AudiFactory; 
     else 
      return new SkodaFactory; 
    } 
}; 

class AudiFactory : public IFactory 
{ 
public: 
    const char* getCar() 
    { 
     return "Audi"; 
    } 
}; 

class MercedesFactory : public IFactory 
{ 
public: 
    const char* getCar() 
    { 
     return "EClass"; 
    } 
}; 

class SkodaFactory : public IFactory 
{ 
public: 
    const char* getCar() 
    { 
     return "Octavia"; 
    } 
}; 

return new MercedesFactory 
return new AudiFactory 
return new SkodaFactory 

(각 행의 각 오류).

문제를 찾으실 수 있습니까? 미리 감사드립니다.

+1

다른 팩토리가 정의 된 후에 클래스 외부에서'createFactory' 함수를 구현하십시오. – syam

+2

형식은 사용할 수 있기 전에 _ 선언해야합니다. –

+0

@CaptainObvlious 감사! 공장. – Billie

답변

2

컴파일러가 정의를보기 전에 클래스를 만들려고합니다. createFactory 함수의 본문을 클래스 정의 아래로 옮깁니다. 소스 파일에있는 것이 바람직합니다. 어쨌든 클래스 내에서 전체 함수를 사용하지 않아야합니다.

2

createFactory에서 클래스 이름을 사용하기 전에 MercedesFactory 등을 선언해야합니다. 또한 createFactory 구현을 .cpp 파일로 이동해야합니다.

관련 문제