C++ Classes

Darien

Power Member
Queria fazer algo do género:

Código:
class X
{
...
};

class Y
{
vector <X> cenas;
};

Isto dá-me "undeclared identifier", como posso contornar o problema? (além disso, posso contorná-lo sem ter um default constructor para X? - não sei se é relevante ou não, faz sentido não poder ter, por exemplo, um array de uma classe que ainda não foi definida; agora com um vector pensei que fosse diferente).
Ainda vou dedicar algum tempo a este assunto, mas se me pudessem dar umas luzes agradecia.

Desde já obrigado.
 
O teu undeclared identifier é a keyword "vector", não é a classe X.
Estás a fazer #include <vector> ?
Tens using namespace std; ?

Se não tens o using tens dizer explicitamente o nome do namespace na declaração: std::vector <X> cenas;

O único problema que poderias ter do género que estavas a descrever (classes não definidas). Seria se no .h de uma classe A precisasses de saber que outra classe B existe mas não podias fazer include do .h da classe B(por exemplo quando as duas classes se referenciam mutuamente). Nesse caso terias que fazer uma forward declaration de B no .H da classe A, usar ponteiros para a classe B e colocar o include no .CPP da classe A.
 
O problema não é daí, porque já tinha incluído isso. Vou pôr aqui (parte de) o código que tenho, pode ser que ajude:

Código:
class Card
{
public:
Card();
Card(string suit, string value);
bool isfaceup() {return faceup;};
void turnup() {faceup=true;};

private:
string suit;
string value;
bool faceup;
};

class Dealer
{
public:
Dealer();
int remaining() {return deck.size;};
void shuffle() {random_shuffle(deck.begin(),deck.end());};
Card drawcard();                                                              // o primeiro erro é logo nesta linha, diz que falta um ; antes de "drawcard"

private:
vector <Card> deck;
vector <Card> hand;
int points;
};

Ainda pensei adicionar, ao construtor de dealer, algo do género:
Código:
deck = new vector<Card>();
mas até isso me dá erro.
 
Boas.

Não percebo muito de C++, mas vejo um erro na linha
Código:
int remaining() {return deck.size;};
que deveria ser
Código:
int remaining() {return deck.size();};

com parêntesis no final, pois size é um método da classe vector.

Miguel
 
Boas.

Não percebo muito de C++, mas vejo um erro na linha
Código:
int remaining() {return deck.size;};
que deveria ser
Código:
int remaining() {return deck.size();};

com parêntesis no final, pois size é um método da classe vector.

Miguel

Sim, tens razão. De qualquer maneira no original não está assim, só cometi o erro após passar para o fórum, portanto não é daí.
 
Sim, tens razão. De qualquer maneira no original não está assim, só cometi o erro após passar para o fórum, portanto não é daí.
Não vejo erro nenhum. Copiei o teu código e criei uma solução com isso e compilou na boa... Podes por aqui TODO o código da solução?

PS: Nem sequer tinhas o código completo desse .h, faltava:
Código:
#include <vector>
#include <string>
#include <algorithm>
using namespace std;

Tens a certeza que o código que mostraste está no mesmo .h? Cá para mim no sítio onde declaras a classe Dealer ela não faz idéia o que é a class Card...
 
Já vi qual foi o problema. No .h do ficheiro onde ia estar a main tinha #ifndef CARD_H (ou seja, repetição do que já tinha usado). É o que dá o copy/paste :facepalm:
 
Back
Topo