包含自定义头文件时出现编译器错误

compiler error on including a custom made header file

本文关键字:编译器 错误 自定义 文件 包含      更新时间:2023-10-16

晚上好,

你们中的一些人可能会认为这是一个愚蠢的问题。但我已经开始学习C++了,一切都很顺利,直到我遇到了这个困扰我好几天的错误。到目前为止,我已经在网络上做了一些研究,并修复了我能修复的一切。

问题是,当我试图包含我制作的新头文件时,编译器无法识别该文件的内容。我使用的是Dev-C++编译器。

当我尝试编译时,我得到了以下错误:main.cpp第8行错误:"test123"未声明(首先使用此函数)

我有一个名为001的文件夹,其中有另一个名称为src的文件夹(我在其中存储.h文件),以及main.cpp和new.cpp.

这是main.cpp的代码:

#include <iostream>
#include "src/functions.h"
using namespace std;
int main(){
    test123(5,'Test String');
    //close on enter keystroke
    cin.clear();
    cin.ignore(255,'n');
    cin.get();
    return 0;
}

这是函数中的代码。h:

#ifndef FUNCTIONS_H_INCLUDED
#define FUNCTIONS_H_INCLUDED
    string test123(int i,string inputStr);
#endif

以下是functions.cp:中的代码

#include "src/functions.h"
string test123(int n, inputStr){
    for(int i=0;i<=n;i++){
        cout << "nt"+inputStr <<endl;
    }
}
  1. 在头中,变量必须声明为extern,然后在.cpp文件中定义
  2. functions.h没有#include <string>来提供函数test123的返回类型
  3. .cpp文件没有#include <iostream>来提供cout
  4. 您在functions.cpp.中没有test123定义的inputStr参数的类型

    #ifndef FUNCTIONS_H_INCLUDED
    #define FUNCTIONS_H_INCLUDED
    #include <string>
    extern int testVar;
    std::string test123(int i, std::string inputStr);
    #endif
    

    对于.cpp:

    #include <iostream>
    #include "src/functions.h"
    using namespace std;
    int testVar = 123456;
    string test123(int n, string inputStr){
        for(int i=0;i<=n;i++){
            cout << "nt"+inputStr <<endl;
        }
    }
    

functions.cpp不包括test123返回的string类型的定义;CCD_ 13的第二自变量不具有任何类型。这不可能编译。编译器可能会丢弃完全错误的test123定义,从而在以后进行混乱的抱怨。但问题是声明不正确,如果编译器以前没有大声抱怨,我会非常惊讶。

如果你想在这里得到一些澄清,那么尝试将问题简化为一个尽可能小的程序来展示问题是值得称赞的,没有人会在一个他们真正不关心的程序中费力地浏览数百行无关的内容。但是,请确保确实编译了,或者几乎是这样,也确实显示了你想要建议的确切问题。确保任何让你困惑的编译器消息都是唯一的消息。