我有几个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() '
我该如何解决这个问题?
我有一个我不明白的问题.我有一个产生线程的类.一切都好.我做了一个新对象 - 一切都好.如果我将这些存储在一个向量中来迭代我的代码就无法编译.我用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) 我有
std::vector<unsigned char> data = {0x00,0x00,0x00,0x01};- 我将这个传递给的函数需要unsigned char *- 我执行以下操作:unsigned char * converted = static_cast<unsigned char*>(data.data());然后我将传递转换为该函数。我将在整个代码中广泛使用它。我更喜欢使用向量,因为我发现它们更容易处理。现在的问题是 - 这是否安全 - 我的意思是我可以指望它总是有效还是缓慢或糟糕的方法?如果是这样,有什么更好的方法来做到这一点?
问候。
我改编了 libusb 热插拔示例
\n\n* libusb example program for hotplug API\n * Copyright \xc2\xa9 2012-2013 Nathan Hjelm <hjelmn@mac.com>
(下面的代码)作为测试并将其放入类中,因为我的真实程序也有同样的问题。\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)