小编ZoO*_*007的帖子

C++ 14在方法定义中使用auto关键字

我有几个std::unordered_maps.他们都有一个std::string关键,他们的数据不同.我想从给定地图的密钥创建一个csv字符串,因为该数据需要通过网络发送到连接的客户端.目前,我为每个地图都有一个方法.我想让这个通用,我想出了以下内容:

std::string myClass::getCollection(auto& myMap) {
    std::vector <std::string> tmpVec;
    for ( auto& elem : myMap) {
        tmpVec.push_back(elem.first);
    }
    std::stringstream ss;
    for ( auto& elem : tmpVec ) {
        ss << elem <<',';
    }
    std::string result=ss.str();
    result.pop_back(); //remove the last ','
    return result;
}
Run Code Online (Sandbox Code Playgroud)

我使用eclipse编译gcc 6.1.0和-std = c ++ 14并且它编译但它没有链接.链接器抱怨未定义的引用std::__cxx11::getCollection(someMap);

无论地图数据和我称之为的方式,它总是告诉我:

Invalid arguments ' Candidates are: std::__cxx11::basic_string<char,std::char_traits<char>,std::allocator<char>> getCollection() '

我该如何解决这个问题?

c++ parameters auto c++14

12
推荐指数
3
解决办法
922
查看次数

错误:将已删除的函数'test :: test(const test&)C++与向量结合使用

我有一个我不明白的问题.我有一个产生线程的类.一切都好.我做了一个新对象 - 一切都好.如果我将这些存储在一个向量中来迭代我的代码就无法编译.我用g ++ 4.9 i686.我制作了以下简短的程序,它完全模仿了问题,因为真正的代码相当广泛.如果有人能够澄清或给我一个对我的宠物项目很有帮助的解决方案,因为我坚持这个.代码如下:

#include <thread>
#include <string>
#include <iostream>
#include <vector>

class test
{
public:
    test();
    void setstring(std::string s);
    ~test() { }
    void runThread() { m_thread = std::thread(&test::print, this); }
    void stop() {on=false;m_thread.join(); }
private:
    std::string s;
    bool on=false;
    std::string m_data;
    std::thread m_thread;
    void print();
};

test::test(){s="";m_data="";}

void test:: print() { std::cout << "I'm running" << '\n'; on = true;
    while(on==true){std::cout << m_data << '\n';}
}

void test:: setstring(std::string s){m_data = s;}

int main()
{
//this works …
Run Code Online (Sandbox Code Playgroud)

c++ c++11

4
推荐指数
1
解决办法
1502
查看次数

C++ 将 vector&lt;unsigned char&gt; 转换为 unsigned char *

我有 std::vector<unsigned char> data = {0x00,0x00,0x00,0x01};- 我将这个传递给的函数需要unsigned char *- 我执行以下操作:unsigned char * converted = static_cast<unsigned char*>(data.data());然后我将传递转换为该函数。我将在整个代码中广泛使用它。我更喜欢使用向量,因为我发现它们更容易处理。现在的问题是 - 这是否安全 - 我的意思是我可以指望它总是有效还是缓慢或糟糕的方法?如果是这样,有什么更好的方法来做到这一点?

问候。

c++

0
推荐指数
1
解决办法
4917
查看次数

错误:非静态成员函数 'int test::hotplug_callback(libusb_context*, libusb_device*, libusb_hotplug_event, void*)' 的使用无效

我改编了 libusb 热插拔示例

\n\n

* libusb example program for hotplug API\n * Copyright \xc2\xa9 2012-2013 Nathan Hjelm <hjelmn@mac.com>

\n\n

(下面的代码)作为测试并将其放入类中,因为我的真实程序也有同样的问题。\n我知道如果我将 static 放在它起作用的两个回调前面,但我不希望它们是静态的。我想从回调访问我的实例变量。这个想法是用户插入一个 USB 设备,我们称之为 usbXYZ。从回调中,我实例化类 usbXYZ 并放入 std::map - 用户将其删除,然后我将其从地图中删除。包含带有对象的 std::map 的类有一个“更高级别”的方法来写入设备。

\n\n

请问如何使回调函数非静态工作?如果可能的话请解释一下,因为我不明白。谢谢。

\n\n
#include <stdlib.h>\n#include <stdio.h>\n#include <thread>\n\n#include "libusb-1.0/libusb.h"\n\nclass test{\npublic:\n    test() {\n        okGo();\n    }\n\nprivate:\n    int done = 0;\n    libusb_device_handle *handle = NULL;\n\n    int LIBUSB_CALL hotplug_callback(libusb_context *ctx, libusb_device *dev, libusb_hotplug_event event, void *user_data)\n    {\n        struct libusb_device_descriptor desc;\n        int rc;\n\n        (void)ctx;\n        (void)dev;\n        (void)event;\n        (void)user_data;\n\n        rc = libusb_get_device_descriptor(dev, &desc);\n        if (LIBUSB_SUCCESS != …
Run Code Online (Sandbox Code Playgroud)

c++ libusb

0
推荐指数
1
解决办法
258
查看次数

标签 统计

c++ ×4

auto ×1

c++11 ×1

c++14 ×1

libusb ×1

parameters ×1