在头文件c ++中重新定义函数

时间:2017-10-31 07:39:07

标签: c++ vector header

编写我的头文件并尝试在cpp.file中使用它之后。尝试重新定义头文件中的函数时,编译器给出了一个错误。 以前我以类似的方式使用标题时,我没有遇到过这个问题。也许我以错误的方式初始化Vector。无论如何这里是代码:

#include <string>
#include <vector>
#include "lajitellut.h"
using namespace std;

namespace otecpp_lajitellut{

/*this is where the error appears*/
vector<string> lajitellut(int lkm, char*mjt[]){
    vector<string> stringVector;
    for(int i =0; i<lkm; i++){
        stringVector.push_back(mjt[i]);
    }

    for(int i =0; i<lkm; i++){
        for(int a = 0; a<lkm;a++){
            if(stringVector[i] < stringVector[a]){
                stringVector[i].swap(stringVector[a]);
            }
        }
    }

    return stringVector;
}

}

这是头文件

#ifndef kissa
#define kissa
#include <string>
#include <vector>
namespace otecpp_lajitellut{

std::vector <std::string> lajitellut(int lkm, char* mjt[]) {
    std::vector<std::string> stringVector;
    return stringVector;
}

}
#endif // kissa

2 个答案:

答案 0 :(得分:3)

只将函数声明放在“lajitellut.h”头文件中:

#include <vector>
#include <string>
namespace otecpp_lajitellut {
    std::vector<std::string> lajitellut(int, char*);
}

将函数定义放在源“*。cpp”文件中:

#include <iostream>
#include <vector>
#include <string>
#include "lajitellut.h"
namespace otecpp_lajitellut {
    std::vector<std::string> lajitellut(int lkm, char* mjt[]) {
        // your code in here
    }
}
int main(){
    auto a = otecpp_lajitellut::lajitellut(10, "asd");
}

请注意,定义也是一个声明。那就是说你那里没有矢量。您有std::vector<std::string>类型的函数。请勿使用using namespace std;

答案 1 :(得分:0)

罗恩是对的。

您的函数lajitellut()已在具有相同签名的.h文件中实现。您无法在同一名称空间中创建double。

您可以更改参数或返回值的类型,或更改.cpp文件中的命名空间。