2013-07-31 44 views
0

我GOOGLE了這個錯誤消息,但我找不到與我的情況的關係。語法錯誤:標識符「MercedesFactory」?

我試圖讓一個cars abstract factory

#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"; 
    } 
}; 

我有3個錯誤:

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

上線:

return new MercedesFactory 
return new AudiFactory 
return new SkodaFactory 

(每行每一個錯誤)。

你能幫我找到問題嗎?提前致謝。

+1

在定義了其他工廠之後,在類外實現'createFactory'函數。 – syam

+2

類型必須聲明_before_他們可以使用。 –

+0

@CaptainObvlious謝謝!作品。 – Billie

回答

2

您正試圖在編譯器看到它們的定義之前創建您的類。將createFactory函數的主體移到您的類定義之下,最好在您的源文件中。無論如何,你應該避免把整個函數放在類中。

2

在createFactory中使用類名之前,您應該聲明MercedesFactory和其他人。 您還需要將createFactory實現移動到.cpp文件中。

相關問題