例如,我们有以下源文件:

types.h:

#pragma once

typedef enum { RED, GREEN, BLUE } myColorSet;

随便什么
#pragma once

myColorSet getColor( int args[] );

随便
#include "whatever.h"
#include "types.h"

myColorSet getColor( int args[] ) {

    //returning the color according to args
}

编译抛出:



这让我有些困惑,但是似乎编译器认为
myColorSet getColor( ... );

来自what.h是myColorSet的声明。我想在myColorSet函数中使用getColor作为返回类型。我想念什么吗?

另外,当我在what.h(而不是whatth.cpp)中包含“types.h”时,它也可以正常工作。但据我所知,最好避免包含在.h文件中。

我应该只在include.h中添加include还是有另一种(对吗?)方法?谢谢。

最佳答案

当您声明myColorSet getColor( int args[] )时,编译器尚不知道myColorSet;但这是必须的,因为myColorSet是该函数的返回类型。

没错,最好避免包含在.h文件中。但这仅适用于必须在#include和前向声明之间进行选择的情况。在这种情况下,前向声明是首选。在某些情况下,向前声明还不够。在这些情况下,您必须使用#include

您可以通过像这样的whatever.cpp来更改标题而无需离开

#include "types.h"
// myColorSet is now known, so we can declare getColor(int args[]) now:
#include "whatever.h"

myColorSet getColor( int args[] ) {

    //returning the color according to args
}

但是不建议这样做,因为现在编译取决于头文件的包含顺序。

09-25 20:41