在标头 C++ 中使用 STL 进行函数声明

function declaration with STL in header c++

本文关键字:STL 函数 声明 C++      更新时间:2023-10-16

我对将程序拆分为header等的概念很陌生。 通常,它没问题,但是在这种情况下,如果我尝试下一步,我会遇到一大堆错误:

假设我有一个.cpp文件:

#include <iostream>
#include <string>
#include <map>
#include <algorithm>
#include <vector>
#include "Header.h"
using namespace std;
int main() {
    //some code here
}
map <char, char> create(vector <char> &one, vector <char> &two) {
    //some code here
}
vector <char> conc(string phrase) {
    // some code here
} 
vector <char> result(vector<char> three, map <char, char> code) {
    // some code here
}

Header.h我有:

map <char, char> create(vector <char> &one, vector <char> &two);
vector <char> conc(string phrase);
vector <char> result(vector<char> three, map <char, char> code);

这只是函数声明。如果我将它们放在.cpp程序运行良好,但如果在 Header.h 中 - 它不会。你能告诉我这里缺少什么吗?

我正在阅读有关 cprogramming.com 拆分的概念,但他们从未使用 STL 的例子。谢谢!

你在 cpp 文件中使用 using namespace std;,但不在标头中使用(也不要在标头中使用它),所以你应该使用完全限定的类型名称:

#ifndef HEADER_H
#define HEADER_H
#include <string>
#include <map>
#include <vector>
std::map <char, char> create(std::vector <char> &one, std::vector <char> &two);
std::vector <char> conc(std::string phrase);
std::vector <char> result(std::vector<char> three, std::map <char, char> code);
#endif // HEADER_H

这主要是一个有根据的猜测,因为您没有发布实际错误或整个代码。

每个 STL 类名之前都缺少std::,因为不应在头文件中使用using语句。

例: std::map <char, char> create(std::vector <char> &one, std::vector <char> &two);

还要确保在头文件的顶部有正确的包含语句(<vector>等)。