Еще одна проблема «не объявлена ​​в этой области», когда она объявлена

В настоящее время я работаю над карточной программой для класса и сталкиваюсь с проблемой, когда компилятор говорит мне, что вещи не объявляются в области видимости, когда они есть, а некоторые вещи вообще не объявляются, когда это так. Вот код:

Card.h:

#ifndef _CARD_H
#define _CARD_H

#include <iostream>
#include <string>

using namespace std;

enum RANK{Joker, Ace = 1, Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten, Jack, Queen, King}
enum SUIT{Clubs, Diamonds, Hearts, Spades}

class Card
{
private:
//Rank and Suit variables for all cards
int rank;
int suit;

public:
//Constructors
Card();
Card(int r, int s);

//Getters
int getRank();
int getSuit();

//Setters
void setRank(int r);
void setSuit(int s);

//toString
string toString();
};

#endif

Card.cpp:

#ifndef _CARD_H
#define _CARD_H
#include "Card.h"#include <iostream>
#include <string>

using namespace std;

//Default constructor
Card::Card()
{
rank=Joker;
suit=Clubs;
}

//Constructor
Card::Card(int r, int s)
{
rank = r;
suit = s;
}

//Getters for rank and suit
int Card::getRank()
{
return rank;
}
int Card::getSuit()
{
return suit;
}

//Setters for rank and suit
void Card::setRank(int r)
{
rank = r;
}
void Card::setSuit(int s)
{
suit = s;
}

//toString function for output
string Card::toString()
{
string tempstring = ""; //list of if-else statements for what to add to the string that gets printed
if (rank == 0)
{
tempstring += "Joker";
goto stringEnd; //sends the process to the end of the list if rank is Joker so it doesn't attempt to add a suit to the card toString
}
else if (rank == 1)
tempstring += "Ace of ";
else if (rank == 2)
tempstring += "Two of ";
else if (rank == 3)
tempstring += "Three of ";
else if (rank == 4)
tempstring += "Four of ";
else if (rank == 5)
tempstring += "Five of ";
else if (rank == 6)
tempstring += "Six of ";
else if (rank == 7)
tempstring += "Seven of ";
else if (rank == 8)
tempstring += "Eight of ";
else if (rank == 9)
tempstring += "Nine of ";
else if (rank == 10)
tempstring += "Ten of ";
else if (rank == 11)
tempstring += "Jack of ";
else if (rank == 12)
tempstring += "Queen of ";
else if (rank == 13)
tempstring += "King of ";
if (suit == 0)
tempstring += "Clubs";
else if (suit == 1)
tempstring += "Diamonds";
else if (suit == 2)
tempstring += "Hearts";
else if (suit == 3)
tempstring += "Spades";
stringEnd:
return tempstring;
}

#endif

Я не уверен, почему он не компилируется правильно. Мне кажется, все в порядке.

0

Решение

Вы не должны использовать #include охранники в .cpp файл. Ваш .h файл в основном не анализируется вообще, потому что _CARD_H уже определено.

5

Другие решения

  1. Недостающие точки с запятой в конце объявлений enum.
  2. Включения не нужны в Card.cpp, кроме #include «Card.h»

Итак, Card.h будет похож

#ifndef _CARD_H
#define _CARD_H

#include <iostream>
#include <string>

using namespace std;

enum RANK{Joker, Ace = 1, Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten, Jack, Queen, King};
enum SUIT{Clubs, Diamonds, Hearts, Spades};

class Card{
private:
//Rank and Suit variables for all cards
int rank;
int suit;
public:
//Constructors
Card();
Card(int r, int s);

//Getters
int getRank();
int getSuit();

//Setters
void setRank(int r);
void setSuit(int s);

//toString
string toString();
};

#endif

И Card.cpp будет как

#include "Card.h"//Default constructor
Card::Card()
{
rank=Joker;
suit=Clubs;
}

//Constructor
Card::Card(int r, int s)
{
rank = r;
suit = s;
}

//Getters for rank and suit
int Card::getRank()
{
return rank;
}
int Card::getSuit()
{
return suit;
}

//Setters for rank and suit
void Card::setRank(int r)
{
rank = r;
}
void Card::setSuit(int s)
{
suit = s;
}

//toString function for output
string Card::toString()
{
string tempstring = ""; //list of if-else statements for what to add to the string that gets printed
if (rank == 0)
{
tempstring += "Joker";
goto stringEnd; //sends the process to the end of the list if rank is Joker so it doesn't attempt to add a suit to the card toString
}
else if (rank == 1)
tempstring += "Ace of ";
else if (rank == 2)
tempstring += "Two of ";
else if (rank == 3)
tempstring += "Three of ";
else if (rank == 4)
tempstring += "Four of ";
else if (rank == 5)
tempstring += "Five of ";
else if (rank == 6)
tempstring += "Six of ";
else if (rank == 7)
tempstring += "Seven of ";
else if (rank == 8)
tempstring += "Eight of ";
else if (rank == 9)
tempstring += "Nine of ";
else if (rank == 10)
tempstring += "Ten of ";
else if (rank == 11)
tempstring += "Jack of ";
else if (rank == 12)
tempstring += "Queen of ";
else if (rank == 13)
tempstring += "King of ";
if (suit == 0)
tempstring += "Clubs";
else if (suit == 1)
tempstring += "Diamonds";
else if (suit == 2)
tempstring += "Hearts";
else if (suit == 3)
tempstring += "Spades";
stringEnd:
return tempstring;
}

Должно скомпилироваться нормально.

0

По вопросам рекламы [email protected]