Значения перечислителя класса не могут быть переданы в качестве параметров функции другого класса

В программе, которую я создаю, я пытаюсь заставить определенный класс передавать данные в функцию другого класса в качестве параметра. Эти данные являются переменной из перечислителя члена первого класса. Но я получаю много ошибок. Код ниже является примером того, что я пытаюсь сделать. Я добавил ошибки в комментариях над их строками:

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

Почему я не могу отправить переменную перечислителя члена одного класса в качестве параметра функции другого класса?

0

Решение

У тебя есть проблема круговой зависимости. Ваши файлы могут включать друг друга все, что они хотят, но

#pragma once

вверху означает, что только один видит другого; не то, что каждый видит другого.


Есть несколько способов пойти сюда.

Одним из способов было бы удалить перечислитель A вне класса (возможно, для некоторых более частных namespace). В общем, вы хотите, чтобы ваши классы «знали как можно меньше» друг о друге в любом случае.

4

Другие решения


По вопросам рекламы [email protected]