• Create Account

## aggregate has incomplete type and cannot be defined

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

8 replies to this topic

### #1sleepy566  Members

100
Like
0Likes
Like

Posted 12 May 2010 - 04:48 PM

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]

### #2Endurion  Members

5164
Like
0Likes
Like

Posted 12 May 2010 - 04:54 PM

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.

### #3Hodgman  Moderators

49387
Like
0Likes
Like

Posted 12 May 2010 - 04:54 PM

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.

### #4sleepy566  Members

100
Like
0Likes
Like

Posted 12 May 2010 - 05:04 PM

Made the changes and the error changed. At least that's progress, right?

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

### #5Hodgman  Moderators

49387
Like
0Likes
Like

Posted 12 May 2010 - 05:21 PM

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

### #6sleepy566  Members

100
Like
0Likes
Like

Posted 12 May 2010 - 05:30 PM

As a matter of fact main.h and character.h both have similar lines at the top...

### #7Hodgman  Moderators

49387
Like
0Likes
Like

Posted 12 May 2010 - 05:32 PM

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.

### #8sleepy566  Members

100
Like
0Likes
Like

Posted 12 May 2010 - 05:38 PM

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.

### #9Zahlman  Members

1682
Like
0Likes
Like

Posted 12 May 2010 - 06:04 PM

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.

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.