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()
在我的以下类中访问我的public
enum 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);

}