我的私有方法如何在C++中访问公共枚举

How can my private method access public enum in C++?

本文关键字:访问 枚举 C++ 有方法 我的      更新时间:2023-10-16

我想知道如何或是否可以使我的私有方法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++中的任何内容。这根本不是公共或私人的问题。这只是一个问题,当您在函数中使用枚举时,它尚未声明。但是,枚举不能向前声明,因此您必须交换公共和私有块才能使其工作。