所以我有2个类让我们称它为A类和B类,这些类中的一个作为函数的参数互相引用。当我试图向前宣布它时:
// A.h (Header guarded)
namespace ns {
class B { // Attempt to forward declare B
public:
int getRand();
};
class A {
public:
float a, b;
void aFunc(B &b);
};
}
// B.h (Header guarded)
namespace ns {
class A { // Attempt to forward declare A
public:
float a, b;
};
class B {
public:
void bFunc(A &a);
int getRand();
};
}
问题是,当我这样做时,我遇到'class' type redefinition
错误。我一直在寻找解决方案,但仍然没有找到解决方案。我这样做对吗?我想我不是,你能告诉我我在哪里做错了吗?
答案 0 :(得分:2)
他们不会转发声明,他们肯定会定义。
你应该
// A.h (Header guarded)
namespace ns {
class B; // forward declare B
class A {
public:
// Some functions with B references as arguments
};
}
B.h
也是如此。
根据你的情况,只有一些成员函数将声明的类作为参数,你可以将成员函数的声明留在.h文件中,并在.cpp文件中提供它们的定义。如
// A.h (Header guarded)
namespace ns {
class B; // forward declare B
class A {
public:
float a, b;
void aFunc(B &b);
};
}
// B.h (Header guarded)
namespace ns {
class A; // forward declare A
class B {
public:
void bFunc(A &a);
int getRand();
};
}
// A.cpp
#include "A.h"
#include "B.h"
namespace ns {
void A::aFunc(B& b) { /* ... */ }
}
// B.cpp
#include "A.h"
#include "B.h"
namespace ns {
void B::bFunc(A& b) { /* ... */ }
int B::getRand() { /* ... */ }
}