gpt4 book ai didi

C++ 简单循环引用和前向声明问题

转载 作者:搜寻专家 更新时间:2023-10-31 02:12:52 25 4
gpt4 key购买 nike

我收到这个错误:

error C3646: 'bar': unknown override specifier

当尝试在 Visual Studio 2015 中编译这个非常简单的 C++ 代码时:

ma​​in.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 进行前向声明。更一般的情况是,如果 FooBar 相互依赖,则需要前向声明。

关于C++ 简单循环引用和前向声明问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42111943/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com