• Advertisement
Sign in to follow this  

aggregate has incomplete type and cannot be defined

This topic is 2812 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

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]

Share this post


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

Instead of:

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.

Share this post


Link to post
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.

Share this post


Link to post
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.

Share this post


Link to post
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.

Share this post


Link to post
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.

Share this post


Link to post
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.

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement