我收到此错误:
错误C3646:' bar':未知覆盖说明符
尝试在Visual Studio 2015中编译这个非常简单的C ++代码时:
的main.cpp :
def account_manager_for_user
self.account_manager
end
foo.h中:
#include "Foo.h"
int main ()
{
return 0;
}
Bar.h :
#pragma once
#include "Bar.h"
class Foo
{
public:
Foo();
Bar bar;
};
我得到一个循环引用,因为每个.h包含另一个,并且解决方案应该使用前向声明,但它们似乎不起作用,有人可以解释原因吗?我在这里发现了类似的问题,解决方案总是一样的,我想我错过了一些东西:)
答案 0 :(得分:2)
循环引用完全由您自己制作,您可以通过从Bar.h中删除#include "Foo.h"
来安全删除它:
#pragma once
//#include "Foo.h" <---- not necessary, Bar does not depend on Foo
class Bar
{
public:
Bar();
};
您不需要Bar
内Foo.h
的前瞻声明。更一般的情况是,Foo
和Bar
相互依赖,这需要前瞻声明。