编写我的头文件并尝试在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
答案 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
文件中的命名空间。