2016-07-04 20 views
1

Im初心者はC++です。私はこれが私にこのようなエラーが与えた名前空間を作成し、名前空間におけるC++標準ベクトルの初期化

namespace nsHttpWorker{ 

    std::vector<string> nvMobileAgents = { 
     "Mozilla/5.0 (Linux; U; Android 4.0.3; ko-kr; LG-L160L Build/IML74K) AppleWebkit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30", 
     "Mozilla/5.0 (Linux; U; Android 4.0.3; de-ch; HTC Sensation Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30", 
     "Mozilla/5.0 (Linux; U; Android 2.3; en-us) AppleWebKit/999+ (KHTML, like Gecko) Safari/999.9", 
     "Mozilla/5.0 (Linux; U; Android 2.3.5; zh-cn; HTC_IncredibleS_S710e Build/GRJ90) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1", 
     "Mozilla/5.0 (Linux; U; Android 2.3.5; en-us; HTC Vision Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1", 
     "Mozilla/5.0 (Linux; U; Android 2.3.4; fr-fr; HTC Desire Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1", 
     "Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; T-Mobile myTouch 3G Slide Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1", 
     "Mozilla/5.0 (iPhone; U; CPU iPhone OS 5_1_1 like Mac OS X; en) AppleWebKit/534.46.0 (KHTML, like Gecko) CriOS/19.0.1084.60 Mobile/9B206 Safari/7534.48.3", 
     "Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543 Safari/419.3", 
     "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/7046A194A", 
     "Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5355d Safari/8536.25", 
     "Mozilla/5.0 (iPod touch; CPU iPhone OS 8_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) FxiOS/1.0 Mobile/12F69 Safari/600.1.4", 
     "Mozilla/5.0 (iPhone; CPU iPhone OS 8_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) FxiOS/1.0 Mobile/12F69 Safari/600.1.4", 
     "Mozilla/5.0 (iPad; CPU iPhone OS 8_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) FxiOS/1.0 Mobile/12F69 Safari/600.1.4" 
    }; 

} 

変数の名前空間として、std::vectorstd::stringのオブジェクトを初期化しようとした:

worker.obj:-1: ошибка: LNK2005: "class std::vector<class std::basic_string<char, 
struct std::char_traits<char>,class std::allocator<char> >, 
class std::allocator<class std::basic_string<char, 
struct std::char_traits<char>,class std::allocator<char> > > > nsFacebookHttp::nvMobileAgents" 
([email protected]@@[email protected][email protected]? 
[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected][email protected]? 
[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@@[email protected]@[email protected]@A) 
already defined in mainwindow.obj 

だから、Cでコンテナinitalisationsを作成することはできませんが++名前空間?

+0

最初にもっと簡単な方法を試してみてください。 – juanchopanza

+0

@juanchopanza私は 'std :: vectorls = {1,2,3,4};'のように名前空間変数として試してみました。エラー: 'facebookworker.obj:-1:ошибка:LNK2005:" class std :: vector > nsFacebookHttp :: ls "(?ls @ nsFacebookHttp @@ 3V?$ vector @HV?$ allocator @ H @ std @@@ std @@ A) mainwindow.obj' – Vlad

+0

最初にもっと簡単なものを試してみてください。 intのベクトルではありません。ちょうど 'int'。 – juanchopanza

答えて

0

So is it not possible to make container initalisations in c++ namespace?

もちろん可能です。あなたはそのベクトル変数の複数の定義を持っていることをあなたに伝えるリンカエラーがあります。

あなたはすでにあなたが複数回含まれているヘッダファイルで、ちょうど書くことを持っているはず、別の翻訳単位でそのベクトルが定義されているように見えます

namespace nsHttpWorker{ 
    extern std::vector<string> nvMobileAgents; 
} 

をとに定義(初期化)を移動別の.cppファイル。

+0

ありがとうございました! 名前空間nsFacebookHttp { のstd ::ベクトル nvMobileAgents = { "dsadasd"} '、次いでCPP'の#include "facebookworker.h" で、Iは、 '' .h'のexternのstd ::ベクトル nvMobileAgentsでそのようにそれを作っ;しかし、なぜそれが正確に起こるのですか?私は1つのファイルの複数のインクルードを行ったので? – Vlad

+0

@yasofiz異なる翻訳単位( '.cpp'ファイル)から複数回ヘッダーをインクルードし、それらが一緒にリンクされているときにそれぞれの定義が含まれている場合に発生します。 –

関連する問題