2017-10-31 4 views
1

헤더 파일을 작성하여 cpp.file에서 사용하려고 시도한 후. 헤더 파일에서 함수를 다시 정의하려고하면 컴파일러에서 오류가 발생합니다. 이전과 비슷한 방식으로 헤더를 사용하면서이 문제가 발생하지 않았습니다. 어쩌면 내가 잘못된 방법으로 벡터를 초기화합니다. 여기헤더 파일의 기능 재정의 C++

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

} 

그리고 헤더 파일 "lajitellut.h" 헤더 파일 만 함수 선언 넣어

#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 
+1

헤더 파일에 함수 선언을 넣습니다. 소스 파일에 기능 (정의)을 넣으십시오. – Ron

+3

그런 다음 다시 정의하지 마십시오. 정의 대신 헤더 파일에 선언을 넣고 싶었 을까? – VTT

+0

또는 헤더에서 일부 '인라인'함수를 * 선언 (선언 할뿐만 아니라)합니다. –

답변

3

됩니다 :

#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;을 사용하지 마십시오.

0

론이 맞습니다.

lajitellut()은 이미 동일한 서명이있는 .h 파일에 구현되어 있습니다. 동일한 네임 스페이스에 이중을 만들 수 없습니다.

.cpp 파일의 반환 값 또는 반환 값 유형을 변경하거나 네임 스페이스를 변경할 수 있습니다.