例如,我们有以下源文件:
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
}
但是不建议这样做,因为现在编译取决于头文件的包含顺序。