C++有没有其他替代前向声明的方法?例如,我有一个使用类A的类B。
class B
{
public:
void set_classA_val( A &b);
};
class A
{
private:
int example;
};
除了将类A放在类B之前,还有其他解决此编译问题的替代方案吗?我们还有其他选择吗?前向声明是唯一的解决方案吗?
C++有没有其他替代前向声明的方法?例如,我有一个使用类A的类B。
class B
{
public:
void set_classA_val( A &b);
};
class A
{
private:
int example;
};
除了将类A放在类B之前,还有其他解决此编译问题的替代方案吗?我们还有其他选择吗?前向声明是唯一的解决方案吗?
是的,如果您不想在B之前放置A,则在这种情况下,前向声明是唯一的解决方案(如果您不想更改B的定义-请参见Zac Howland的答案以获取更改B的其他想法)。这没有任何问题。某种程度上,来自B的方法需要知道A是什么(在这种情况下,它是一个类)。要么编译器通过找到A的定义来弄清楚,要么您可以通过前向声明帮助编译器。
class A;
class B
{
public:
void set_classA_val( A &b);
};
class B
{
public:
void set_classA_val( class A &b);
};
有几个选项,但是如果没有更多关于你的目标的信息,很难告诉你哪个是最好的。前向声明、移动A
的定义以及将B
变为模板类都是一些选项。假设你对前两者已经熟悉了,那么后者看起来应该像这样:
template<typename T>
class B
{
public:
set_value(T& t);
};
你可以使用以下代码声明它:
B<A> ba;
class A;
就可以编译通过了。 - Cory Nelson