//--------- C++
class cl2;
class cl1
{
public:
int q;
void fn2(cl2 &t);
};
class cl2
{
public:
int i;
void fn(cl1 &w);
};
//-- реализация функций только после полного описания интерфейса - т.е. фиксации размеров классов
//-- теперь компилятор знает сколько именно стека нужно резервировать в функциях под классы
void cl1::fn2(cl2 &t){t.i = 87;}
void cl2::fn(cl1 &w){w.q = 9;}
class cl2;
class cl1
{
public:
int q;
void fn2(cl2 *t);//{t->i = 87;} // здесь реализация не прокатит: ещё неизвестен размер и состав класса cl2
}; // например, откуда последовательному компилятору знать о члене 'i' ?
class cl2
{
public:
int i;
void fn(cl1 *w){w->q = 9;} // размер и состав класса cl1 уже известен на этом этапе. поэтому можно здесь.
};
void cl1::fn2(cl2 *t){t->i = 87;}
//void cl2::fn(cl1 *w){w->q = 9;}
是的,我想我应该给它一个加号 ))
很好地说明了 "为什么?"问题的无意义性,也许还有其他问题?:)
:)一个想法--在VS中是否有一些其他的方法?还是没有用?
:)我有一个想法--也许VS应该有一个不同的做事方式?
是的。
是的。
顺便说一下,这也是不行的。
这就是它的工作方式。
你去吧,毛绒玩具已经关闭了:)。谢谢你。
不,不,不,不!保持加号。"MS很烂,MQ是王道!"
你也可以这样去做。
要记住的主要一点是,C++规则被设计为按顺序 编译。当然,VS是对的。如果你把fn2函数的实现放在类之外和cl2定义之后,这个声明就足够了。
由于函数是在主体中定义的,简单的声明是不起作用的(尽管是通过引用传递),因为函数的运行需要cl2定义。
要么是一个bug,要么是一个bug。最有可能的是后者,但最好是澄清一下。