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

时间:2015-06-09 11:04:37

标签: c++ class parameters header enumerator

在我正在编写的程序中,我试图让某个类将数据传递给另一个类的函数作为参数。该数据恰好是来自第一类成员枚举器的变量。但是我收到了很多错误。下面的代码是我尝试做的一个例子。我已将评论中的错误添加到其行内:

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;
}

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

1 个答案:

答案 0 :(得分:4)

你有circular dependency problem

,您的文件可以包含所有他们想要的内容
#pragma once
在顶部意味着只有一个看到另一个;不是每个人都看到了另一个。

有几种方法可以去这里。

一种方法是删除类外A的枚举器(可能是更私密的namespace)。通常,您希望您的课程在任何情况下都能“尽可能少地了解”。