2013-12-06 4 views
0

У меня есть класс объекта, и из него получается класс исключений. Теперь я хочу, чтобы метод класса объектов выдавал объект исключения, но запускался в бесконечные проблемы «базового класса не определены» и «неполный тип». Возможно ли это?C++ круговая зависимость

Спасибо.

Код:

class object 
{ 

public: 
    virtual ~object(){ } 

    virtual bool equals(){ throw new exception; } 
    virtual int getHash(){ throw new exception; } 
    virtual void getType(){ throw new exception; } 
}; 

class exception : 
    public object 
{ 
private: 
public: 
    exception(); 
    virtual ~exception(); 
    virtual const char* info(); 
}; 
+0

@ user7236293 Отредактировано. Спасибо :) – babel92

+0

@ValekHalfHeart Я пробовал, но получил «неполный тип» – babel92

ответ

1

Не определить функцию-член в классе. Определите его после определения двух классов.

+0

Должен ли я помещать его в отдельный файл cpp? – babel92

+0

Либо это, либо определить его как встроенный в заголовок. –

+0

Значит ли «встроенный» ключевое слово языка или просто внедряет реализации после деклараций классов? Я пробовал последний, и он работает. – babel92

1

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

+0

Это единственный выбор? Потому что мне это совсем не нравится ... – babel92

+0

Я верю, что в большинстве случаев полагаться на собственный файл cpp является предпочтительным (за исключением inline/templates и т. Д.). C/C++ не работают, как и другие языки, такие как Java/C# и т. Д. Включение вашего заголовочного заголовка вызовет много проблем в компиляции в будущем. Если вы действительно хотите всегда помещать impl вместе с вашим объявлением, не выбирайте C/C++ :) –

+0

На самом деле я создаю .NET-подобную структуру, чтобы практиковать программирование шаблонов и хочу сделать ее опрятной (то есть , всякий раз, когда я хочу его использовать, мне нужно только «включить»). Но теперь это немного сложно :) – babel92

0

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

class exception { 
     private: 
     public: 
      exception(); 
      // rest of your code 
    }; 

    class object { 
     public: 
      virtual ~object() {} 
      virtual bool equals() { throw exception(); } 
      // rest of your code 
    }; 
+0

На самом деле, мне нужно, чтобы он наследовал от класса объекта :) – babel92

Смежные вопросы