Followers 0

# aggregate has incomplete type and cannot be defined

## 8 posts in this topic

error: ‘shopkeep’ was not declared in this scope
error: expected ;' before ‘crunchy’
error: ‘crunchy’ was not declared in this scope

shopkeep.h
#ifndef _SHOPKEEPH_
#define _SHOPKEEPH_

class shopkeep
{
private:
int x;
int y;
int charStatus;

public:
shopkeep();
void handleUser();
void show();
};

shopkeep::shopkeep()
{
x = 600;
y = 360;
charStatus = CRUNCHY_DOWN;
}

void shopkeep::handleUser()
{
/* blah */
}

void shopkeep::show()
{
/* blah */
}

#endif


main.cpp clip
#include "main.h"
#include "character.h"
#include "shopkeep.h"
#include "timer.h"

/* setup stuff */

int main(int argc, char* argv[])
{

/* initialization stuff */

timer fps;
character hero;
shopkeep crunchy; //errors

/* game stuff */

crunchy.show(); //error

/* more game stuff */

return 0;
}


I'm 90% positive this is very simple, but I've been staring at it for a couple hours and I believe I'm confused. What's going on here and how can I avoid this error? [Edited by - sleepy566 on May 12, 2010 11:06:18 PM]
0

##### Share on other sites
The problem is that you put "class" in front of the declarations, you don't need that.

class timer fps;class character hero;class shopkeep crunchy;

make it

timer fps;character hero;shopkeep crunchy;

Also, you could've posted these little code snippets without problems, use [ code ] or [ source ] tags.
0

##### Share on other sites
I'm not sure exactly what's wrong, but here's some tips:

1) When declaring variables, you don't need the class keyword on the front.
e.g.
class timer fps;
should just be:
timer fps;

2) The implemenation of your shopkeep class is in a header file. This will cause those functions to be compiled for every CPP file that includes this header. This will cause linker errors if you include that header in more than a single CPP file.
Instead, your function bodies should be written in a single CPP file.
0

##### Share on other sites
Made the changes and the error changed. At least that's progress, right?

Updated the original post to reflect everything as it is now.
0

##### Share on other sites
By chance, does main.h or character.h have these lines at the top?
#ifndef _SHOPKEEPH_#define _SHOPKEEPH_`
0

##### Share on other sites
As a matter of fact main.h and character.h both have similar lines at the top...
0

##### Share on other sites
I meant those lines exactly.
Occassionally you'll copy & paste the same "header guards" into different header files, which causes one of the headers to be skipped (e.g. if main.h defined _SHOPKEEPH_, then shopkeep.h wouldn't actually be included).

In another direction, there could be an error at the end of character.h, like forgetting a "}" character (which will screw up the following code, in this case, shopkeep.h). You could try changing the order of your #include's and see if the error changes.
0

##### Share on other sites
Changed the order of the includes around a couple times, but the errors remained consistent. character.h was clean too. Dunno what's going on.
0

##### Share on other sites
Don't use leading underscores when you write the header guards. Such names are reserved.

That's unlikely to be the cause of the problem here, but it's still a matter of correctness.

Also, your definitions of shopkeep::shopkeep(), void shopkeep::handleUser() and void shopkeep::show() belong in shopkeep.cpp, not shopkeep.h.
0

## Create an account

Register a new account