我的私有方法如何在C++中访问公共枚举
How can my private method access public enum in C++?
我想知道如何或是否可以使我的私有方法threshold()
在以下类中访问我的公共enum payloadTypes
:
class A {
private:
unsigned int threshold(payloadTypes kindOfPayload,int x,int y);
public:
enum payloadTypes {
INVALID =-1,
TEST=0,
THRESHOLDS,
RX,
};
}
如果我如上所述,我会收到此错误,并且我不想将枚举的范围更改为private
错误:"有效负载类型"尚未声明
unsigned int threshold(payloadType kindOfPayload,int x,int y(;
> 由于thresholdsGetter
不是类定义的一部分,因此您需要编写A::payloadTypes
而不是payloadTypes
,因为参数相关查找无法提供帮助。
或者,您在threshold
的实现中是否有错别字?根据编译器错误,您已经编写了thresholdsGetter
。但是,不管Stroustrup说1,你仍然需要在类定义中的函数之前声明你的enum
。如果您更正了它,那么您的代码将按原样工作。
1请注意
struct foo
{
enum bar {};
void foobar(bar b){}
};
将编译,但是
struct foo
{
void foobar(bar b){}
enum bar {};
};
不会。
必须先声明枚举,然后才能使用它。
class A {
public:
enum payloadTypes {
INVALID = -1,
TEST = 0,
THRESHOLDS,
RX,
};
private:
unsigned int threshold(payloadTypes kindOfPayload, int x, int y);
}
您的编译器错误是关于thresholdsGetter()
的,但您呈现的代码是关于threshold()
的。如果编译器错误是事实,那么您需要将原型从:
unsigned int thresholdsGetter(payloadTypes kindOfPayload,int x,int y);
对此:
unsigned int thresholdsGetter(A::payloadTypes kindOfPayload,int x,int y);
这样A::payloadTypes
解析枚举,因为它是在函数之前定义的。如下所述,枚举无法转发。
如果您发布的代码是真实的,则以下情况成立:
问题是,当你声明你的函数时,枚举没有声明或定义。
这将起作用:
class A {
public:
enum payloadTypes {
INVALID =-1,
TEST=0,
THRESHOLDS,
RX,
};
private:
unsigned int threshold(payloadTypes kindOfPayload,int x,int y);
};
但是,不能转发声明枚举。阅读 在 C++ 中向前声明枚举中的更多信息。
如果不在使用前声明或向前声明,则不能使用C++中的任何内容。这根本不是公共或私人的问题。这只是一个问题,当您在函数中使用枚举时,它尚未声明。但是,枚举不能向前声明,因此您必须交换公共和私有块才能使其工作。
- 如何正确实现和访问运算符的各种自定义枚举器
- 访问在 C++ 结构中声明的枚举变量
- 如何确保 Visual C++ 不允许作用域枚举访问?
- 通过包装器从 C 访问C++ API 时,如何访问枚举类型
- 从类访问枚举成员
- 如何通过索引访问枚举类
- 从匿名结构访问枚举条目
- 使用标识符前缀访问枚举
- 如何定义别名以通过结构访问枚举类成员
- 如何在cython中访问枚举
- 语法从父类访问枚举
- 通过int值访问枚举成员
- 如何从QML访问枚举
- 从类中访问枚举,这两个类都在同一命名空间中
- 为什么用::来访问枚举值?
- 在单例类中声明和访问枚举- c++
- 以前声明为受保护的枚举的访问枚举器
- 从头文件访问枚举时出错
- 如何从CPP的头文件中访问枚举
- 类对象无法访问枚举器标记名称?