incomplete type

Keep getting the following compile errors.

..\src\main.cpp:36:13: error: field 'card_rank' has incomplete type 'Card_Deck'
Card_Deck card_rank;
^
..\src\main.cpp:37:13: error: field 'card_suit' has incomplete type 'Card_Deck'
Card_Deck card_suit;

I think its something simple, but am at a loss to explain. What's going on here and fix it how?


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include<iostream>

using namespace std;

	enum Card_Rank
		{
			 One,
		     Two,
			 Three,
			 Four,
			 Five,
			 Six,
			 Seven,
			 Eight,
			 Nine,
			 Ten,
			 Jack,
			 King,
			 Queen,
			 Ace
		};

	enum Card_Suit
		{
			Spades = 99,
			Clubs = 1099,
			Diamonds =2500,
			Hearts = 12
		};


	struct Card_Deck
	{
		//int card_rank = 0;
		//int card_suit = 0;
		Card_Deck card_rank;
		Card_Deck card_suit;
	};


void	fill_card_deck(Card_Deck * card_ptr)
			{
			  int ctr(0);
				while(ctr<52)
				{
				 card_ptr[ctr].card_rank = ctr;
				++ctr;
				}
			}

int main()
{

	    Card_Deck * card_ptr = new Card_Deck[52];
	    fill_card_deck(card_ptr);
	    cout<<card_ptr[43].card_rank;

	    return 0;

}
Last edited on
1
2
3
4
5
6
7
struct Card_Deck
	{
		//int card_rank = 0;
		//int card_suit = 0;
		Card_Deck card_rank;
		Card_Deck card_suit;
	};


You can't have Variables of type Card_Deck inside the Card_Deck struct? I mean, what's the logic here?
You are correct. Fixed in this revison but a new one popped up:

\src\main.cpp:46:25: error: invalid conversion from 'int' to 'Card_Rank' [-fpermissive]

I am trying to link an array of structs to card rankings and suits. Error location:

card_ptr[ctr].rank = ctr; in "fill_card_deck function"

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63

#include<iostream>

using namespace std;

	enum Card_Rank
		{
			 One,
		     Two,
			 Three,
			 Four,
			 Five,
			 Six,
			 Seven,
			 Eight,
			 Nine,
			 Ten,
			 Jack,
			 King,
			 Queen,
			 Ace
		};

	enum Card_Suit
		{
			Spades = 99,
			Clubs = 1099,
			Diamonds =2500,
			Hearts = 12
		};


	struct Card_Deck
	{
		//int card_rank = 0;
		//int card_suit = 0;
		Card_Rank rank;
		Card_Suit suit;
	};


void	fill_card_deck(Card_Deck * card_ptr)
			{
			  int ctr(0);
				while(ctr<52)
				{
				 card_ptr[ctr].rank = ctr;
				++ctr;
				}
			}

int main()
{

	    Card_Deck * card_ptr = new Card_Deck[52];
	    fill_card_deck(card_ptr);
	    cout<<card_ptr[43].rank;

	    return 0;

}

Last edited on
int and Card_Rank are two different types. Simply assigning an int to a Card_Rank will not work.

I was going to say you could solve this by adding an explicit cast, or by changing the type of rank to int, but when I look closer i see there are problems with the code other than just what the compilation errors show. You loop ctr from 0 up to 52, so ctr is not really the rank, is it? It looks like you will have to do some calculations on ctr to get the rank and suit out of it.
Topic archived. No new replies allowed.