error: Class has not been declared despite header inclusion, and the code compiling fine elsewhere

Viewed 110165

So I have a class included in another class that keeps throwing a compile error of the form "error: 'ProblemClass' has not been declared. The files are set up thusly:

#ifndef PROBLEMCLASS_H
#define PROBLEMCLASS_H

#include <iostream>
#include <cmath>

class ProblemClass
{
  public:

    virtual void Init() = 0;
};

#endif

and the class where the error occurs looks like this:

#ifndef ACLASS_H
#define ACLASS_H

#include "problemclass.h"

class AClass : public Base
{
  public:

    void DoSomething(ProblemClass* problem);

};

#endif

The compile error occurs at void Dosomething();

I'm aware the code here isn't enough to solve the problem. I've been unable to create a minimal example that can reproduce it. So my question is much more general; what sort of things might cause this? Is there anything in particular I should look for, or some line of enquiry I should be following to track it down?

This code compiles fine in an almost identical version of the project.

Help of any sort would be greatly appreciated, no matter how vague. I'm using codeblocks 10.05 with mingw4.4.1 in win 7 64 bit.

9 Answers

I had the same problem and I've discovered what I was doing wrong: following your example, I've included ProblemClass in AClass, thus causing the problem.

Forward declare 'ProblemClass' should do the thing. Forward declarations are necessary to resolve circular includes that throw off linker/compiler errors.
If I have that kind of problems, a go through headers and make Forward Declaration whenever possible, which anyway is a good practice.

Had the same problem, A.h is included in B1.h and B2.h B2.h is also included in B2.cpp

Used #Pragma once in class A.h this resolved the issue.

Related