我知道我对#include的理解或者编译方式是不正确的,否则我的代码就可以了。我为什么我的代码在两个位置需要#include以便编译和正确运行时感到困惑。
我的主要cpp文件armperfmon.cpp:
#include "armperfmon.h"
int main(int argc, char* argv[])
{
FILE* pOutFile = NULL;
PrintCounterOptions(pOutFile);
}
主头文件armperfmon.h:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "counters.h"
void PrintCounterOptions(FILE* pFile);
包含函数counters.cpp的第二个cpp:
void PrintCounterOptions(FILE* pFile)
{
fprintf("print some stuff");
}
函数counters.h的第二个头文件
void PrintCounterOptions(FILE* pFile);
错误:
counters.cpp: error: 'FILE' was not declared in this scope
counters.cpp: error: 'pFile' was not declared in this scope
如果我在函数cpp文件中输入#include <stdio.h>
,则错误消失,函数按预期编译/执行。我假设在main.h文件中包含<stdio.h>
时,它可用于后续的FILE *定义,特别是因为它包含在counters.h之前。当我输入这个时,我也意识到更正确的包括<cstdio>
。如果有人能够澄清我的思维过程有什么问题,我将不胜感激。
答案 0 :(得分:1)
很难完全回答这个问题,因为你已经删除了所有特定的细节,比如文件名,但简而言之,C ++源文件是在结果链接在一起之前独立编译的,并且根本看不到“主标题”编译“第二个cpp”时:它只是“主cpp文件”的标题。实际上,头文件的整个目的是作为声明的公共位置,然后将#include
转换为多个转换单元,这是您需要通过向“第二个头”添加必要的代码来完成的文件”。