C++ 我的私有方法如何访问C++;?
我想知道如何或是否可以让我的私有方法C++ 我的私有方法如何访问C++;?,c++,function,class,oop,enums,C++,Function,Class,Oop,Enums,我想知道如何或是否可以让我的私有方法threshold()在我的以下类中访问我的publicenum payloadTypes: class A { private: unsigned int threshold(payloadTypes kindOfPayload,int x,int y); public: enum payloadTypes { INVALID =-1, TEST=0, THRESHOLDS, RX, }; } 如果按照上述操作,我会遇
threshold()
在我的以下类中访问我的publicenum payloadTypes
:
class A {
private:
unsigned int threshold(payloadTypes kindOfPayload,int x,int y);
public:
enum payloadTypes {
INVALID =-1,
TEST=0,
THRESHOLDS,
RX,
};
}
如果按照上述操作,我会遇到此错误,我不想将枚举的范围更改为private
错误:“payloadTypes”尚未声明
无符号整数阈值(payloadTypes类Payload,int x,int
y) )
由于
thresholdsGetter
不是类定义的一部分,您需要编写A::payloadTypes
而不是payloadTypes
,因为依赖于参数的查找无法解决问题
或者,您的阈值实现中是否有输入错误?根据编译器错误,您已经编写了thresholdsGetter
。但是,不管Stroustrup怎么说,您仍然需要在类定义中的函数之前声明enum
。如果您纠正了这一点,那么您的代码将按原样工作
1注意
将编译,但是
struct foo
{
void foobar(bar b){}
enum bar {};
};
不会。您的编译器错误是关于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);
};
但是,不能向前声明枚举。请阅读中的详细信息。您必须在使用枚举之前声明它
class A {
public:
enum payloadTypes {
INVALID = -1,
TEST = 0,
THRESHOLDS,
RX,
};
private:
unsigned int threshold(payloadTypes kindOfPayload, int x, int y);
}
< > > C++中没有任何东西可以在使用前声明<或>强>或向前声明它。这根本不是公共或私人的问题。这只是一个问题,当您在函数中使用enum时,它还没有被声明。但是,无法向前声明枚举,因此必须交换公用和专用块才能使其工作。这是不正确的。请注意,thresholdsGetter
不是类定义的一部分。@Bathsheba你是什么意思?该函数是a类
的成员函数,不是吗?不,阈值
是,不是threseholdsGetter
@Bathsheba抱歉重复询问您,已更新!顺便说一句,你的回答很好。不用担心。这就是所谓的评论。这是一个很好的答案。投票表决。你能澄清一下thresholdGetter
是否是一个不同于threshold
的函数,或者它是否只是你问题中的一个“错别字”吗?@Angew你是对的,这是一个“错别字”可能是一个错别字是的,OP不粘贴代码而只是重写它,这真是令人惊讶。你确定吗?当我编译类时(在类的后面声明了enum),我得到了错误:未知类型名'payloadTypes'
。在函数删除错误之前移动枚举。例如,请参见。我不理解您的评论,该解决方案正是@gsamaras.Oops提供的解决方案。我错了。将向下投票转换为向上投票的简单编辑。道歉。
class A {
public:
enum payloadTypes {
INVALID = -1,
TEST = 0,
THRESHOLDS,
RX,
};
private:
unsigned int threshold(payloadTypes kindOfPayload, int x, int y);
}