1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

C++ Classes

Discussão em 'Programação' iniciada por Darien, 9 de Maio de 2012. (Respostas: 8; Visualizações: 792)

  1. Darien

    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.
     
  2. Kemosabe-TBC

    Kemosabe-TBC Power Member

    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.
     
  3. Darien

    Darien Power Member

    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.
     
  4. jmike72

    jmike72 Power Member

    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
     
  5. Darien

    Darien Power Member

    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í.
     
  6. Kemosabe-TBC

    Kemosabe-TBC Power Member

    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...
     
  7. Darien

    Darien Power Member

  8. Kemosabe-TBC

    Kemosabe-TBC Power Member

    Havia 2 erros. As linhas com deck.size() não tinham o parentesis a indicar a chamada à função. Corrigido isso compilou sem problemas
     
  9. Darien

    Darien Power Member

    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:
     

Partilhar esta Página