【发布时间】:2015-05-12 03:39:55
【问题描述】:
我一直在做一个项目,并且有很多课程,其中一些看起来像这样:
class A
{
// stuff;
};
class B
{
A& test;
public:
B(A& _test) :
test(_test)
{};
void doStuff();
};
class C
{
A foo;
B bar(foo);
void exp()
{
bar.doStuff();
}
};
当 C::foo 不是类型名称时,这最终会在 C 类中中断。在我更大的项目中,所有内容都被分解为单独的 .cpp 和 .h 文件,如果我在 B.h 中#include“C.h”,我看不到该错误,但在 bar 所在的 C.cpp 中仍然存在错误我的编译器完全无法识别(Visual Studio 2013)。即使 A& 是 A*,错误仍然存在(当然,在必要时将代码从引用更改为指针)。有人对这里发生的事情有任何提示吗?
【问题讨论】:
-
“破”是什么意思?编译器错误?运行时错误?出乎意料的结果?
-
B bar(foo) 存在编译器错误(成员 "C::foo" 不是类型名称),最终导致项目因编译器错误而中断
-
旁注:您将临时副本传递给参考,您的
B(A _test)应该是B(A& _test)。 -
是的,这是一个快速类型的例子。我主要关心的是 C:foo 不是类型