Class 枚举值不能作为参数传递给另一个 class 的函数

Class enumerator values cannot be passed as parameters to another class's function

在我制作的程序中,我试图让某个class 将数据作为参数传递给另一个class 的函数。此数据恰好是来自第一个 class 的成员枚举器的变量。但是我遇到了很多错误。下面的代码是我正在尝试做的一个例子。我在他们的行上方的评论中添加了错误:

main.cpp:

#include "A.h"

int main(int argc, char* args[]) {
    A a;

    a.callFunctionB();

    return 0;
}

A.h:

#pragma once
#include "B.h"

class B;

class A {
public:
    enum Enumerator {x, y, z};
    void callFunctionB();
private:
    //C2146: syntax error : missing ';' before identifier 'b'
    //C4430: missing type specifier - int assumed.
    B b;
    Enumerator e = x;
};

A.cpp:

#pragma once
#include "A.h"

void A::callFunctionB() {
    //C2660: 'B::functionB' : function does not take 1 arguments
    b.functionB(e);
}

B.h:

#pragma once
#include "A.h"

class A;

class B {
public:
    //C2653: 'A': is not a class or namespace name
    //C2061: syntax error : identifier 'Enumerator'
    //C2653: 'A' is not a class or namespace name
    void functionB(A::Enumerator e);
};

B.cpp:

#pragma once
#include "B.h"
#include <iostream>

void B::functionB(A::Enumerator e) {
    std::cout << "It worked! Enumerator variable 'x' was passed to function B." << std::endl;
}

为什么我不能将一个 class 的成员枚举器的变量作为参数发送给另一个 class 的函数?

你有一个circular dependency problem。您的文件可以相互包含所有他们想要的,但是

#pragma once

在最上面表示只有一个能看到另一个;不是每个人都看到对方。


有几种方法可以到达这里。

一种方法是在 class 之外删除 A 的枚举器(可能是一些更私有的 namespace)。一般来说,在任何情况下,您都希望 class 彼此 "know as little as possible"。