这是我的主文件:
#include "MyHeader.h"
int main(void)
{
MyClass Test1;
Test1.set_a_thing();
return 0;
}
这是头文件:
#ifndef MY_CLASS_H_
#define MY_CLASS_H_
class MyClass
{
public:
MyClass();
~MyClass();
enum A_few_Things { yes, no, sometimes, dont_know };
enum MyClass::A_few_Things set_a_thing();
private:
A_few_Things a_few_things = A_few_Things::dont_know;
};
#endif // !MY_CLASS_H_
这是相关的cpp文件:
#include "MyHeader.h"
MyClass::MyClass()
{
}
MyClass::~MyClass()
{
}
MyClass::A_few_Things MyClass::set_a_thing()
{
// for example, return Yes
return A_few_Things::yes;
}
线路enum A_few_Things { yes, no, sometimes, dont_know };
似乎必须是公共的。如果它在private:
字段中,则会出现错误消息:
E0471类"*"没有名称为"*"的标识符">
如何确保enum
本身不能从Main.cpp
调用,而只有从Main.cpp
调用的函数set_a_thing()
才能看到并处理它?
有一个特殊的关键字吗?
例如,我希望函数set_a_thing
返回yes
。
我对C++还相当陌生。我唯一关心的是,我想从一开始就学会它。当你说没有必要采取不同的做法时,那么。。。
感谢大家,尤其是@Eljay🤝你让我走上了正确的道路。enum MyClass::A_few_Things set_a_thing();
不需要返回任何内容。在函数内部,设置了a_few_things
。
#ifndef MY_CLASS_H_
#define MY_CLASS_H_
class MyClass
{
public:
MyClass();
~MyClass();
void set_a_thing();
private:
enum A_few_Things { yes, no, sometimes, dont_know };
A_few_Things a_few_things = A_few_Things::dont_know;
};
#endif // !MY_CLASS_H_
在cpp文件中:
void MyClass::set_a_thing()
{
a_few_things = MyClass::A_few_Things::dont_know;
}
在Main.cpp中,您可以像往常一样调用函数:MyClass Test1; Test1.set_a_thing();
#include <iostream>
class MyClass
{
public:
enum ET_A_few_Things { yes = -1 , no , sometimes = 100, dont_know }; //:: ( 1 )
ET_A_few_Things set_a_thing(); //:: ( 2 )
ET_A_few_Things set_a_thing( ET_A_few_Things ); //:: ( 3 )
private:
ET_A_few_Things a_few_things = dont_know;
};
MyClass::ET_A_few_Things MyClass::set_a_thing()
{
// for example, return Yes
return ( a_few_things = no ); //:: ( 4 )
}
MyClass::ET_A_few_Things MyClass::set_a_thing( MyClass::ET_A_few_Things NewValue_A )
{
// for example, return Yes
return ( a_few_things = NewValue_A );
}
enum class ET_otherThings{ yes , no , sometimes = 73 }; //:: ET_otherThings{ 0 , 1 , 73 }; //:: ( 5 )
void showNumber( ET_otherThings value_A )
{
std::cout << static_cast< int >( value_A ) << std::endl;
}
int main()
{
MyClass Test1;
std::cout << Test1.set_a_thing() << std::endl; //:: result = 0
std::cout << Test1.set_a_thing( MyClass ::sometimes ) << std::endl; //:: result = 100
// Test1.set_a_thing( ET_otherThings:: sometimes ) //:: Error: wrong argument
// showNumber( MyClass:: sometimes ); //:: Error: wrong argument
showNumber( ET_otherThings::sometimes ); //:: result = 73
return 0;
}
*(1(::请记住:枚举是数字类型。每个值都是一个数字。从默认计数开始为0。在本例中,以-1开头。
*(2(:这里只使用类型名称";"ET_A_few_Things"enum";仅用于创建。在一个";MyClass";不要使用";MyClass::";没有这个代码的becouse看起来更干净。
*(3(::允许拾取值的重载函数。
*(4(::第一个设置值,下一个返回新值。它的类函数,所以您不必使用ET_A_few_Things::no。不可见的指针可以正确地完成工作:;这->a_flow_things=这个->否">
*(5(::enum类-用于创建enumType的其他方法。在阶级内部使用";enum";就像在(1(中一样,在其他情况下更好的选择是pick";enum类";。
如果只想从类访问使用此枚举类型,请将此类型放入private或protected访问说明符