shir k
shir k

Reputation: 107

Error using "enum" within a class

I get the following error message about my enum, and I can't figure out why. I have only 1 header file and only 1 source file where I implemented all the functions (and main). I declared the enum within class "Survivor", in "public". I didn't forget to include the header file in the source file. Please help me see what I've done wrong.

"error: 'e_status' does not name a type"

This is my header file:

class Survivor
{
public:
    enum e_status {SINGLE, MARRIED, RELATIONSHIP};

    char* get_name();
    int get_age();
    e_status get_status();

    void set_name(char n[]);
    void set_age (int a);
    void set_status (e_status s);

    const void print();

private:

    char name [20];
    int age;
    e_status status;
};

This is the relevant part in my Source file:

e_status Survivor::get_status()
{
    return status;
}

Upvotes: 1

Views: 59

Answers (2)

Vlad from Moscow
Vlad from Moscow

Reputation: 310950

You have to use a qualified name

Survivor::e_status Survivor::get_status()
{
    //...
}

The type e_status is a member of the class Survivor.

A return type of a member function is not searched in the class scope while for example a parameter type is used in the class scope.

Consider the following two function definitions.

#include <iostream>

class Survivor
{
public:
    enum e_status {SINGLE, MARRIED, RELATIONSHIP};

    e_status get_status();
    void set_status (e_status s);
    //...
private:
    e_status status;
};

Survivor::e_status Survivor::get_status()
{
    return status;
}

void Survivor::set_status (e_status s)
{
    status = s;
}

int main() 
{
    return 0;
}

Upvotes: 5

eduffy
eduffy

Reputation: 40224

You're trying to reference outside the class; do this:

 Survivor::e_status Survivor::get_status()

Upvotes: 1

Related Questions