2016-07-04 15 views
1

Ich bin ein Anfänger in C++. Ich habe Namespace und versucht, die std::vector von std::string Objekte, als Namespace-VariableC++ std Vektorinitialisierung im Namensraum

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

} 

Dies gab mir den Fehler wie folgt zu initialisieren:

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 

So ist es nicht möglich, Behälter initalisations in c zu machen ++ Namensraum?

+0

Versuchen Sie etwas einfacher zuerst, Linie ein 'int'. – juanchopanza

+0

@juanchopanza ich versuchte, wie dies 'std :: vector ls = {1,2,3,4}; als eine Namespace-Variable und ich habe folgenden Fehler:' facebookworker.obj: -1: ошибка: LNK2005: "Klasse std :: vector > nsFacebookHttp :: ls "(? ls @ nsFacebookHttp @@ 3V? $ Vektor @ HV? $ Zuweiser @ H @ std @@@ std @@ A) bereits in definiert mainwindow.obj' – Vlad

+0

Versuchen Sie etwas einfacher zuerst, Linie ein 'int'. Nicht Vektor von Ints. Nur ein 'int'. – juanchopanza

Antwort

0

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

Natürlich ist es möglich. Sie haben einen Linkerfehler erhalten, der Ihnen sagt, dass Sie mehrere Definitionen dieser Vektorvariablen haben.

Es ist wie Sie, dass Vektor in einer anderen Übersetzungseinheit definiert haben bereits sieht, Vermeintliche Sie haben, dass in einer Header-Datei, die mehrfach enthalten ist, schreiben Sie einfach:

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

und die Definition bewegen (Initialisierung) in eine separate Datei.

+0

Danke das ist mir geholfen! Ich habe es wie in '' .h' extern std :: vector nvMobileAgents; 'und dann in cpp' # include "facebookworker.h" Namespace nsFacebookHttp { std :: vector nvMobileAgents = { "dsadasd"} Aber warum passiert das genau? Weil ich mehrere Includes einer Datei gemacht habe? – Vlad

+0

@yasofiz Es passiert, wenn Sie den Header mehrmals aus verschiedenen Übersetzungseinheiten ('.cpp' Dateien) einfügen, und jeder von ihnen enthält die Definition, wenn diese miteinander verknüpft sind. –