sách gpt4 ai đã đi

c++ - VC++ 2010 : 'missing type specifier' errors come and go without changes to code

In lại 作者:行者123 更新时间:2023-11-30 04:31:23 25 4
mua khóa gpt4 Nike

假设有四个文件:foo.h、foo.cpp、bar.h、bar.cpp。

foo.h:

#pragma once

class foo
{
// Whatever
};

foo.cpp

#include "foo.h"

// Foo's definitions

bar.h

#pragma once

class bar
{
bar(const foo & f); // < C4430 'missing type specifier' (not always)
// Other declarations
};

bar.cpp

#include "foo.h"
#include "bar.h"

// Bar's definitions

编译器说 bar.h 中有 C4430。但奇怪的是,我能够通过注释然后取消对该行的注释来构建代码。当然,构建也失败了,行也被注释了,但是当我取消注释时,我就成功构建了。因此,相同的代码可能会或可能不会产生错误。

我的VS是10.0.40219.1 SP1Rel,项目类型是Win32 DLL。

1 Câu trả lời

你需要在bar.h中包含foo.h:

#pragma once

#include "foo.h"
class bar
{
bar(const foo & f);
};

如果您需要完整的类定义,除非您使用指针(在这种情况下前向声明就足够了),否则您需要包含声明该类的文件。

为什么有时编译有时失败?

取决于编译器。我的猜测是 foo.h 包含在到达 bar.h 之前编译的文件中。所以 bar.h 已经知道 đồ ăn 的定义。如果构建失败,则跳过成功编译的文件,并且可能不再包含 foo.h。或者,如果您仅在 x.cpp 中进行更改,编译器将仅构建该文件并可能跳过包含在一个文件中的 foo.h已经编译好了。

我希望我说的很清楚。

为什么你已经拥有的还不够?

你可能会说

//Bar.cpp
#include "foo.h"
#include "bar.h"

// Bar's definitions

hiện hữu bar.h 之前包含 foo.h。确实如此,但是如果 bar.h 包含在不同位置的 foo.h 之前怎么办?这就是为什么在 bar.h 中包含 foo.h 是个好主意。任何包含 bar.h 的文件将不再需要包含 foo.h(必须包含它才能编译),并且在文件中包含您需要的所有内容更有意义。前向声明不是这种情况,但同样,您使用的是完整类型,而不是指针。

关于c++ - VC++ 2010 : 'missing type specifier' errors come and go without changes to code,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8228885/

25 4 0
Bài viết được đề xuất: c++ - 可序列化的 Boost 库 header 和仅 header 库
Bài viết được đề xuất: c++ - Quine McCluskey Minterm 为零怎么办
Bài viết được đề xuất: c++ - C++ 的 RSA 加密
Bài viết được đề xuất: c++ - OpenGL 顶点着色器运行时问题(不使用 VBO 或纹理)
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com