命名空间中的 C++ std vector 初始化

标签 c++ c++11 vector stl initialization

<分区>

我是 C++ 的初学者。我创建了命名空间并尝试将 std::string 对象的 std::vector 初始化为命名空间变量

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" 
(?nvMobileAgents@nsFacebookHttp@@3V?$vector@V?$basic_string@DU?
 $char_traits@D@std@@V?$allocator@D@2@@std@@V?$allocator@V?$basic_string@DU?
 $char_traits@D@std@@V?$allocator@D@2@@std@@@2@@std@@A) 
already defined in mainwindow.obj

那么在 C++ 命名空间中进行容器初始化是不可能的吗?

最佳答案

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

当然可以。您收到一个链接器错误,告诉您您对该 vector 变量有多个定义。

看起来你已经在另一个翻译单元中定义了那个 vector ,假设你在一个多次包含的头文件中有它,只需写:

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

并将定义(初始化)移动到单独的 .cpp 文件中。

关于命名空间中的 C++ std vector 初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38188917/

相关文章:

c++ - 两个成员互相依赖?

c++ - 在非实例化模板中使用 static_assert 的正确方法是什么?

C++ 编译器错误递归模板

c++ - 将 std::vector<char> 的一部分提取到 const char*?

c++ - 在 QProcess 中启动的命令在 Linux 上不返回响应

iphone - 错误 : 'class name' redeclared as different kind of symbol?

c++ - 当对象没有数据成员时,统一初始化复制失败

c++ - "Template argument for template template parameter must be a class template or type alias template"

c++ - <vector> push_back 实现内部

c++ - Std::vector 不更改类内的数据