编译器无法在枚举中找到成员,枚举在单独的头文件中声明,并在源文件中定义

时间:2015-07-01 09:17:33

标签: c++ enums

我是编程新手,我正在使用C ++。

在我的头文件:Globals.h中,我已经声明了我的枚举," Color"以及用于测试它的功能。

在我的源文件Globals.cpp中,我已经定义了枚举和测试函数。

在main中我调用了该函数,但是给出了这条消息:

错误C2027:使用未定义的类型'颜色'

错误C2065:' COLOUR_BLACK':未声明的标识符。

我的代码如下:

Globals.h

#ifndef GlOBALS_H
#define GLOBALS_H

enum class Colour;
void print_Colour(Colour whatColour);

#endif 

Globals.cpp

#include <iostream>
#include "Globals.h"


enum class Colour
{
    COLOUR_BLACK,
    COLOUR_BROWN,
    COLOUR_BLUE,
    COLOUR_GREEN,
    COLOUR_RED,
    COLOUR_YELLOW
};

void print_Colour(Colour whatColour)
{
    switch (whatColour)
    {
    case Colour::COLOUR_BLACK:
        std::cout << "Black" << "\n";
        break;
    case Colour::COLOUR_BROWN:
        std::cout << "Brown" << "\n";
        break;
    case Colour::COLOUR_BLUE:
        std::cout << "Blue" << "\n";
        break;
    case Colour::COLOUR_GREEN:
        std::cout << "Green" << "\n";
        break;
    case Colour::COLOUR_RED:
        std::cout << "Red" << "\n";
        break;
    case Colour::COLOUR_YELLOW:
        std::cout << "Yellow" << "\n";
        break;
    default:
        std::cout << "Who knows!" << "\n";
    }
}

Source.cpp

#include <iostream>
#include "Globals.h"

using namespace std;

int main()
{
    Colour paint = Colour::COLOUR_BLACK; 
    print_Colour(paint);
    std::cin.get();
    std::cin.get();
    return 0;
};

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:4)

Source.cpp只看到前方声明。您应该将实际的enum移到头文件中。

答案 1 :(得分:1)

必须在enum class Colour中包含的标头文件Globals.h中定义

Source.cpp。 否则,此枚举的定义在Source.cpp中不可见。