Jump to content

  • Log In with Google      Sign In   
  • Create Account

FREE SOFTWARE GIVEAWAY

We have 4 x Pro Licences (valued at $59 each) for 2d modular animation software Spriter to give away in this Thursday's GDNet Direct email newsletter.


Read more in this forum topic or make sure you're signed up (from the right-hand sidebar on the homepage) and read Thursday's newsletter to get in the running!


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.

  • You cannot reply to this topic
8 replies to this topic

#1 sleepy566   Members   -  Reputation: 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]

Sponsor:

#2 Endurion   Crossbones+   -  Reputation: 3687

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.

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.

#3 Hodgman   Moderators   -  Reputation: 31912

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.

#4 sleepy566   Members   -  Reputation: 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.

#5 Hodgman   Moderators   -  Reputation: 31912

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_


#6 sleepy566   Members   -  Reputation: 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...

#7 Hodgman   Moderators   -  Reputation: 31912

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.

#8 sleepy566   Members   -  Reputation: 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.

#9 Zahlman   Moderators   -  Reputation: 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.



PARTNERS