В программе, которую я создаю, я пытаюсь заставить определенный класс передавать данные в функцию другого класса в качестве параметра. Эти данные являются переменной из перечислителя члена первого класса. Но я получаю много ошибок. Код ниже является примером того, что я пытаюсь сделать. Я добавил ошибки в комментариях над их строками:
main.cpp:
#include "A.h"
int main(int argc, char* args[]) {
A a;
a.callFunctionB();
return 0;
}
хиджры:
#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;
}
Почему я не могу отправить переменную перечислителя члена одного класса в качестве параметра функции другого класса?
У тебя есть проблема круговой зависимости. Ваши файлы могут включать друг друга все, что они хотят, но
#pragma once
вверху означает, что только один видит другого; не то, что каждый видит другого.
Есть несколько способов пойти сюда.
Одним из способов было бы удалить перечислитель A
вне класса (возможно, для некоторых более частных namespace
). В общем, вы хотите, чтобы ваши классы «знали как можно меньше» друг о друге в любом случае.