Search code examples
c++classinheritanceinclusion

Impossible expected class-name before ‘{’ token error to solve


It's a well known issue this damn error

expected class-name before ‘{’ token

Well, despite my hard working and googling, I could not solve this error. Sorry. This is my last shore.

In ui.cpp of a project of mine I do:

#include "wfqueue_proxy_factory.hpp"

OK, this raises this stupid error in my compiler:

In file included from wfqueue_proxy_factory.hpp:29,from ui.cpp:28: wfqueue_manager_proxy.hpp:42: error: expected class-name before ‘{’ token

There are three classes in my project: First

// wfqueue_proxy_factory.hpp
#ifndef _WFQUEUE_PROXY_FACTORY_HPP
#define _WFQUEUE_PROXY_FACTORY_HPP
#include "wfqueue_manager_proxy.hpp"
// ...
class WFQueueProxyFactory {
//...
};
#endif

Second

// wfqueue_manager_proxy.hpp
#ifndef _WFQUEUE_MANAGER_PROXY_HPP
#define _WFQUEUE_MANAGER_PROXY_HPP
#include "workflow.hpp"
#include "wfqueue.hpp"
// ...
class WFQueueManagerProxy : public WFQueue { // This is the problem (line 42)
//...
};
#endif

Third

// wfqueue.hpp
#ifndef _WFQUEUE_HPP
#define _WFQUEUE_HPP
#include "workflow.hpp"
class WFQueue {
// ...
};
#endif

PLEASE PLEASE PLEASE note that I use ; after } of every class, I checked out EVERY header in my project looking for this problem and didn't find any class not followed by ; after its closing bracket. This is valid for workflow.hpp which is a simple class (not deriving from any class, just a plain class).

WFQueue is some sort if interface, I use this pattern with other classes too and they work. WFQueue contains some virtual pure methods... problem should not be here anyway.... I suppose this because I use another "interface" class with other classes and they work fine.

This error disappears if I do this:

// wfqueue_manager_proxy.hpp
#ifndef _WFQUEUE_MANAGER_PROXY_HPP
#define _WFQUEUE_MANAGER_PROXY_HPP
#include "workflow.hpp"
#include "wfqueue.hpp"
// ...
class WFQueueManagerProxy {
//...
};
#endif

Don't really know how to solve this problem... please help me. Thank you


Solution

  • Just a wild guess: Your error says that in

    class WFQueueManagerProxy : public WFQueue { // This is the problem (line 42)
    //...
    };
    

    there must be a class name before {. Therefore I assume that the compiler doesn't know that WFQueue is a class. Are you sure that its definition is included? I mean, maybe in wfqueue.hpp the class is named WfQueue or different in some other way?