Eckersley
Eckersley

Reputation: 89

Redefining function in header file c++

After writing my header file and trying to use it in the cpp.file. The compiler gives me an error when trying to redefine the function in header file. I didn't face this problem the previous times I was using headers in a similar way. Maybe I initialize the Vector in a wrong way. Anyways here is the code:

#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;
}

}

And here is the header file

#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

Upvotes: 1

Views: 1899

Answers (2)

Sergey Kovalev
Sergey Kovalev

Reputation: 1

Ron is right.

Your function lajitellut() is already implemented in the .h file with the same signature. You can not create a double in the same namespace.

You can change the arguments or the type of the return value or change the namespace in the .cpp file.

Upvotes: 0

Ron
Ron

Reputation: 15501

Put only the function declaration in the "lajitellut.h" header file:

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

Put the function definition in the source "*.cpp" file:

#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");
}

Note that definition is also a declaration. That being said you don't have a vector there. You have a function of type std::vector<std::string>. Don't use using namespace std;.

Upvotes: 3

Related Questions