Pregunta

 // 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 declaración a 'miembro' me da un error de compilación usando el compilador G ++: Error: 'a :: eone' no es un tipo

¿Cómo puedo superar esto? ¿Simplemente necesito crear un constructor predeterminado que no tome parámetros?

¿Fue útil?

Solución

Parece que está tratando de inicializar una variable de miembro. Podrías hacer algo como:

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

Otros consejos

A El constructor espera un eMyEnum. No está claro por qué querrías BEl constructor de no aceptar un eMyEnum parámetro también. De todos modos, asumiendo que tu objetivo es pasar el argumento a AEl constructor como A::eOne (Opuesto a A::eMyEnum::eOne), puede probar el siguiente código, que 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

Sin embargo, observe que memberAEl constructor siempre se llama con el argumento como A::eOne. No ha mostrado cómo se usa este argumento en el constructor, pero supongo que en su código real inicializa a un miembro de A. Si el miembro siempre debe tener el mismo valor, hágalo const y eliminar el parámetro del constructor.

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

    private:   
    A memberA;
}

Eone no es del tipo, Emyenum es el tipo. Lo que es esencialmente diciendo es que "debes pasar el literal 2 a este método", no tiene ningún sentido. Si no quiere pasar un enum en él, tendrá que aclarar lo que estaba buscando.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top