我想知道如何或者如果我可以在以下课程中使用我的隐私方法enum payloadTypes
访问我的公开threshold()
:
class A {
private:
unsigned int threshold(payloadTypes kindOfPayload,int x,int y);
public:
enum payloadTypes {
INVALID =-1,
TEST=0,
THRESHOLDS,
RX,
};
}
如果我这样做,我会收到此错误,并且我不想将我的枚举范围更改为private
错误:'payloadTypes'尚未声明
unsigned int threshold(payloadTypes kindOfPayload,int x,int Y);
答案 0 :(得分:6)
由于thresholdsGetter
不是类定义的一部分,因此您需要编写A::payloadTypes
而不是payloadTypes
,因为Argument Dependent Lookup无法解决。
或者,您在threshold
的实施中是否有拼写错误?根据编译器错误,您已编写thresholdsGetter
。但是,尽管Stroustrup说 1 ,你仍然需要在类定义中的函数之前声明你的enum
。如果你纠正了那么你的代码将按原样运行。
1 请注意
struct foo
{
enum bar {};
void foobar(bar b){}
};
将编译,但
struct foo
{
void foobar(bar b){}
enum bar {};
};
将不。
答案 1 :(得分:4)
您必须在使用之前声明枚举。
class A {
public:
enum payloadTypes {
INVALID = -1,
TEST = 0,
THRESHOLDS,
RX,
};
private:
unsigned int threshold(payloadTypes kindOfPayload, int x, int y);
}
答案 2 :(得分:3)
您的编译器错误大约为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);
};
但是,您无法转发声明枚举。阅读Forward declaring an enum in c++中的更多内容。
答案 3 :(得分:1)
C ++中的任何内容都不能在未使用前声明或转发声明。它根本不是公共或私人问题。它只是一个问题,当你在函数中使用枚举时,它尚未声明。然而,枚举不能向前宣布,所以你将不得不交换公众&私人街区让它发挥作用。