语法错误:标识符`MercedesFactory`?

时间:2013-07-31 02:27:34

标签: c++ design-patterns abstract-factory

我用Google搜索了此错误消息但我无法找到与我的案例的关系。

我尝试制作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

(每行中的每个错误)。

你能帮我找到问题吗?提前谢谢。

2 个答案:

答案 0 :(得分:2)

在createFactory中使用类名之前,您应该声明MercedesFactory和其他人。 您还需要将createFactory实现移动到.cpp文件中。

答案 1 :(得分:2)

您正在尝试在编译器看到其定义之前创建类。将createFactory函数的主体移动到类定义下面,最好是在源文件中。无论如何,你应该避免将整个函数放在类中。