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"。
在我制作的程序中,我试图让某个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"。