标题c ++中带有STL的函数声明

时间:2015-04-14 20:30:16

标签: c++

我对将程序拆分为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的例子。谢谢!

2 个答案:

答案 0 :(得分:5)

您在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

答案 1 :(得分:2)

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

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

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

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