Синтаксическая ошибка: идентификатор `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

(Каждая ошибка в каждой строке).

Можете ли вы помочь мне найти проблему? заранее спасибо.

0

Решение

Вы пытаетесь создать свои классы до того, как компилятор увидит их определения. Переместите тело вашей функции createFactory ниже определений классов, желательно в исходном файле. В любом случае вы должны избегать помещения целых функций в классы.

2

Другие решения

Вы должны объявить MercedesFactory и другие, прежде чем использовать имена классов в createFactory.
Вам также необходимо переместить реализацию createFactory в файл .cpp.

2

По вопросам рекламы [email protected]