C++ 简单循环引用和前向声明问题
C++ Simple circular reference and forward declaration issue
我收到这个错误:
error C3646: 'bar': unknown override specifier
在 Visual Studio 2015 年尝试编译这个非常简单的 C++ 代码时:
main.cpp:
#include "Foo.h"
int main ()
{
return 0;
}
Foo.h:
#pragma once
#include "Bar.h"
class Foo
{
public:
Foo();
Bar bar;
};
Bar.h:
#pragma once
#include "Foo.h"
class Bar
{
public:
Bar();
};
我知道这是一个循环引用,因为每个 .h 都包含另一个,解决方案应该使用 前向声明,但它们似乎不起作用,有人可以吗解释为什么?我在这里发现了类似的问题,而且解决方案总是一样的,我想我遗漏了一些东西:)
循环引用完全是您自己造成的,您可以通过从 Bar.h 中删除 #include "Foo.h"
来安全地删除它:
#pragma once
//#include "Foo.h" <---- not necessary, Bar does not depend on Foo
class Bar
{
public:
Bar();
};
您不需要在 Foo.h
中对 Bar
进行前向声明。更一般的情况是,如果 Foo
和 Bar
相互依赖,则需要前向声明。
我收到这个错误:
error C3646: 'bar': unknown override specifier
在 Visual Studio 2015 年尝试编译这个非常简单的 C++ 代码时:
main.cpp:
#include "Foo.h"
int main ()
{
return 0;
}
Foo.h:
#pragma once
#include "Bar.h"
class Foo
{
public:
Foo();
Bar bar;
};
Bar.h:
#pragma once
#include "Foo.h"
class Bar
{
public:
Bar();
};
我知道这是一个循环引用,因为每个 .h 都包含另一个,解决方案应该使用 前向声明,但它们似乎不起作用,有人可以吗解释为什么?我在这里发现了类似的问题,而且解决方案总是一样的,我想我遗漏了一些东西:)
循环引用完全是您自己造成的,您可以通过从 Bar.h 中删除 #include "Foo.h"
来安全地删除它:
#pragma once
//#include "Foo.h" <---- not necessary, Bar does not depend on Foo
class Bar
{
public:
Bar();
};
您不需要在 Foo.h
中对 Bar
进行前向声明。更一般的情况是,如果 Foo
和 Bar
相互依赖,则需要前向声明。