2016-07-04 20 views
1

我是一個初學者在c + +。我創建的命名空間,並試圖初始化std::stringstd::vector的對象,如變量命名空間中的C++ std向量initalization

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

} 

命名空間這給了我這樣的錯誤:

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]U? 
[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 

因此,它是不可能使容器initalisations在C++命名空間?

+0

首先嚐試一些簡單的方法,行int。 – juanchopanza

+0

@juanchopanza我試過這樣的'std :: vector ls = {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

感謝這幫助了我!我使它像在''.h'的extern的std ::矢量 nvMobileAgents;'然後在CPP'的#include 「facebookworker.h」 命名空間nsFacebookHttp { 的std ::矢量 nvMobileAgents = { 「dsadasd」} ;「但爲什麼會發生這種情況?因爲我做了多個包含一個文件? – Vlad

+0

@yasofiz如果您從不同的翻譯單元('.cpp'文件)多次包含標題,並且每個翻譯單元鏈接在一起時都包含定義,就會發生這種情況。 –