###前提・実現したいこと
読込んだ文字列を任意の区切り文字で分割してvectorに入れるという。関数を作ったのですが、モジュールを分割して作ろうと思い、プロトタイプ宣言をヘッダーファイルに関数定義をmainとは別のcppファイルに定義して使おうとしたのですが、コンパイルするとエラーになります
###発生している問題・エラーメッセージ
重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態 エラー LNK2019 未解決の外部シンボル "void __cdecl stringSplit<class std::vector<int,class std::allocator<int> > >(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,char,class std::vector<int,class std::allocator<int> > &)" (??$stringSplit@V?$vector@HV?$allocator@H@std@@@std@@@@YAXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@DAAV?$vector@HV?$allocator@H@std@@@1@@Z) が関数 _main で参照されました。 重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態 エラー LNK1120 1 件の未解決の外部参照
###該当のソースコード
C++
1/*Source.cpp--------------------------------------*/ 2#include <iostream> 3#include <string> 4#include <vector> 5#include "Header1.hpp" 6using namespace std; 7 8int main() { 9 vector<int> vi; 10 vector<string> vs; 11 vector<double> vd; 12 string s; 13 14 while (getline(cin, s)) { 15 stringSplit(s,' ',vi); 16 } 17 18 return 0; 19} 20/*Source.cpp--------------------------------------*/ 21/*Source1.cpp-------------------------------------*/ 22#include "Header1.hpp" 23#include <string> 24#include <vector> 25 26template<class T>void stringSplit(const std::string & str, char c, T & result) { 27 stringstream ss(str); 28 string buffer; 29 if (typeid(result).name() == "class std::vector<double,class std::allocator<double> >") { 30 while (getline(ss, buffer, c)) { 31 result.push_back(stod(buffer)); 32 } 33 } 34 else if (typeid(result).name() == "class std::vector<int,class std::allocator<int> >") { 35 while (getline(ss, buffer, c)) { 36 result.push_back(stoi(buffer)); 37 } 38 } 39 else if (typeid(result).name() == "class std::vector<string,class std::allocator<string> >") { 40 while (getline(ss, buffer, c)) { 41 result.push_back(buffer); 42 } 43 } 44} 45 46/*Source1.cpp--------------------------------------*/ 47/*Header1.hpp--------------------------------------*/ 48#ifndef _HEADER1_HPP_ 49#define _HEADER1_HPP_ 50#include <string> 51 52template<class T> 53void stringSplit(const std::string & str, char c, T & result); 54 55#endif 56/*Header1.hpp--------------------------------------*/ 57
エラーとは関係ないのですが、stringSplitでの渡されたvectorの型を判断する方法でもっと簡潔に書ける方法があれば教えてほしいです
###補足情報(言語/FW/ツール等のバージョンなど)
c++
vs2015
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/03/02 09:00
2017/03/02 09:45 編集
2017/03/02 12:06
2017/03/02 12:23
2017/03/02 13:03 編集
2017/03/02 12:46
2017/03/02 13:02
2017/03/03 10:46 編集
2017/03/02 13:34
2017/03/03 10:48 編集