2016-07-04 1 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

먼저 간단한 방법을 시도해보십시오. '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의 벡터가 아닙니다. 단지'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 { 표준 : : 벡터 nvMobileAgents = { "dsadasd"}'다음 CPP'사용법 #include "facebookworker.h"에, 나는'.h''통근 표준 : : 벡터 nvMobileAgents에서 그런 식으로했다 ;하지만 왜 그런 일이 정확히 일어 났습니까? 내가 하나의 파일을 여러 번 포함했기 때문에? – Vlad

+0

@yasofiz 서로 다른 번역 단위 ('.cpp' 파일)에서 헤더를 여러 번 포함하고 이들이 함께 링크 될 때 정의가 들어 있습니다. –

관련 문제