2017-10-31 11 views
1

ヘッダーファイルを作成し、cpp.fileで使用しようとしました。コンパイラは、ヘッダファイルの関数を再定義しようとするとエラーが表示されます。 同様の方法でヘッダーを使用していた前回は、この問題に直面しませんでした。たぶん、私は間違った方法でベクトルを初期化します。ヘッダーファイルの関数を再定義するC++

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

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

ヘッダーファイルに関数宣言を挿入します。ソースファイルに機能(定義)を入れてください。 – Ron

+3

次に、何も再定義しないでください。ヘッダファイルに定義の代わりに宣言を入れたいと思ったのでしょうか? – VTT

+0

あるいは、あなたのヘッダに 'inline'関数を定義するだけではありません。 –

答えて

3

"lajitellut.h"ヘッダファイルにのみ、関数宣言を入れている。とにかく、ここのコードです関数定義をソースに入れます"* .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ファイルの戻り値の型または戻り値の型を変更したり、名前空間を変更することができます。

関連する問題