aggregate has incomplete type and cannot be defined

Started by
7 comments, last by Zahlman 13 years, 11 months ago
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]
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 or [ source ] tags.

Fruny: Ftagn! Ia! Ia! std::time_put_byname! Mglui naflftagn std::codecvt eY'ha-nthlei!,char,mbstate_t>

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.
Made the changes and the error changed. At least that's progress, right?

Updated the original post to reflect everything as it is now.
By chance, does main.h or character.h have these lines at the top?
#ifndef _SHOPKEEPH_#define _SHOPKEEPH_
As a matter of fact main.h and character.h both have similar lines at the top...
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.
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.
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.

This topic is closed to new replies.

Advertisement