Domanda

 // In A.h
 class A
 {
  public:
    enum eMyEnum{ eOne, eTwo, eThree };
  public:
    A(eMyEnum e);
 }

 // In B.h
 #include "A.h"
 class B
 {
    B();
    private:
       A memberA;
 }

 // In B.cpp
#include "B.h"
 B::B(void) : memberA(A::eOne)
 {}

La Dichiarazione a "Member" mi dà un errore di compilazione usando il compilatore G ++: Errore: "A :: Eone" non è un tipo

Come posso superare questo? Devo semplicemente creare un costruttore predefinito che non richiede parametri?

È stato utile?

Soluzione

Sembra che tu stia cercando di inizializzare una variabile membro. Potresti fare qualcosa come:

class B
{
public:
    B() : memberA(A::eOne) {}  // Initializer list in constructor
private:
    A memberA;
};

Altri suggerimenti

A Il costruttore si aspetta a eMyEnum. Non è chiaro perché vorresti Bcostruttore per non accettare un eMyEnum anche parametro. Comunque, Supponendo a cui il tuo obiettivo è di superare l'argomento a Acostruttore come A::eOne (al contrario di A::eMyEnum::eOne), potresti provare il seguente codice, che usa typedef.

#include <iostream>
using namespace std;

class A {
public:
    typedef enum { eOne, eTwo, eThree } eMyEnum;
public:
    A(eMyEnum e) {
        cout << "A ctor" << endl;
    }
};

class B {
public:
    B() : memberA(A::eOne) {
        cout << "B ctor" << endl;
    }
private:
    A memberA;    

};

int main() {
    B b;
}

// output
A ctor
B ctor

Tuttavia, nota che memberAIl costruttore è sempre chiamato con l'argomento come A::eOne. Non hai mostrato come questo argomento sia usato nel costruttore, ma presumo che nel tuo codice reale iniziasse un membro di A. Se il membro deve sempre avere lo stesso valore, fallo const e rimuovere il parametro dal costruttore.

class B
{
    public:
    B(A::eMyEnum someValue = A::eOne) : memberA(someValue) {};

    private:   
    A memberA;
}

Eone non è il tipo, l'emyenum è il tipo. Quello che stai essenzialmente dicendo è che "devi passare il letterale 2 in questo metodo" - non ha alcun senso. Se non intendi passare un enum in esso, dovrai chiarire cosa stavi cercando.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top