小编Dan*_*Dan的帖子

将std :: unique_ptr推回std :: vector时,编译器不会失败

一个unique_ptr不能被推回到一个std::vector,因为它是不可复制的,除非std::move被使用。但是,让我们F使用一个返回a的函数unique_ptr,然后std::vector::push_back(F())允许该操作。下面是一个示例:

#include <iostream>
#include <vector>
#include <memory>

class A {
  public:
    int f() { return _f + 10; }

  private:
    int _f = 20;
};

std::unique_ptr<A> create() { return std::unique_ptr<A>(new A); }


int main() {
  std::unique_ptr<A> p1(new A());

  std::vector< std::unique_ptr<A> > v;

  v.push_back(p1); // (1) This fails, should use std::move

  v.push_back(create()); // (2) This doesn't fail, should use std::move?

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

(2)允许,但(1)不允许。这是因为返回的值被隐式地移动了吗?

在中(2) …

c++ smart-pointers stdvector move-semantics

22
推荐指数
3
解决办法
1822
查看次数

使用 clang-tidy 时忽略某些文件

我正在尝试clang-tidy与集成cmake,但有些文件属于我想忽略的特定目标。

有没有办法让 clang-tidy 忽略特定目录下的文件或名称与特定模式匹配的文件?

static-analysis cmake clang-static-analyzer clang-tidy

13
推荐指数
1
解决办法
1158
查看次数

了解嵌入式软件中的链接描述文件 NOLOAD 部分

根据 GNU 文档ld,一个NOLOAD部分的工作原理如下:

“(NOLOAD)”指令将标记一个在运行时不加载的节。链接器将正常处理该节,但会对其进行标记,以便程序加载器不会将其加载到内存中。

现在,关于程序加载器,根据维基百科:

嵌入式系统通常没有加载程序,而是直接从 ROM 执行代码。为了加载操作系统本身,作为引导的一部分,使用了专门的引导加载程序。

那么,NOLOAD固件/嵌入式软件的一个部分到底有什么作用呢?

memory embedded linker loader firmware

8
推荐指数
2
解决办法
1万
查看次数

尝试使用python访问"google drive"时出错(google quickstart.py源代码)

我正在尝试学习如何从Python访问Google云端硬盘,但我遇到了问题.

我按照谷歌官方网站的教程:https://developers.google.com/drive /... t-python?hl = es 另外,我已经看过关于这个的视频教程,我想我做的比视频家伙.

我告诉你我按照字面意思执行的步骤:

1 - 安装pip工具以从Google安装SDK.

2 - 从Google安装SDK:"pip install --upgrade google-api-python-client"

在这一步一切顺利,事实上,使进口等没有错.

3 - Drive Enable API:我按照原样执行步骤,创建"本机应用程序的客户端ID"和"Web应用程序的客户端ID"

4 - 我创建文档"document.txt"并快速启动时复制源代码.

5 - 我通过出现在"本机应用程序的客户端ID"中替换"CLIENT_ID"和"CLIENT_SECRET"(我还使用Web应用程序进行了测试)

6 - 我跑,屏幕输出是:

No handlers could be found for logger "oauth2client.util"
Go to the following link in your browser:
<link>
Enter verification code:
Run Code Online (Sandbox Code Playgroud)

寻找解决方案,我发现了一些有关该错误的信息:

import logging
...
logging.basicConfig()
Run Code Online (Sandbox Code Playgroud)

现在,输出是:

C:\workspaces\asd\prsGoogleApi>quickstart.py
WARNING:oauth2client.util:__init__() takes at most 4 positional arguments (5 giv
en)
Go to the following link in your browser: …
Run Code Online (Sandbox Code Playgroud)

python google-api oauth-2.0 google-api-python-client

6
推荐指数
2
解决办法
1558
查看次数

Android:意图:传递位图而不压缩

我正在开发安卓系统。我需要保存位图而不丢失质量。

我尝试过使用compress()位图方法,将质量设置为 100。这对我不起作用,位图损失了太多质量。我已经用 JPEG 和 PNG 格式进行了测试。

我已经测试过将位图复制到 a ByteBuffer,然后提取byte[]并使用FileOutputStream. 在这种情况下,我无法显示使用这种方式保存的图像,我只能看到一个空白页面。

我的问题是,有什么方法可以在不压缩的情况下将位图保存在SD卡中吗?

编辑:这是我的代码的一部分

public class MainActivity extends ActionBarActivity {

    [...]

    @Override
    protected void onActivityResult(int reqCode, int resCode, Intent handler){
        super.onActivityResult(reqCode, resCode, handler);
        if(reqCode == CAPTURE_IDENTIFIER && resCode == Activity.RESULT_OK){
// THis is that I have tested.
//          Object o = handler.getData();
//          Object o2 = handler.getExtras().getParcelable("data");
//          Object o3 = handler.getExtras().get("data");
//          Object o4 = handler.getParcelableExtra("data");
//          
            prepareCapture();
            startActivityForResult(cameraHandler, CAPTURE_IDENTIFIER);
        }
    }



    private …
Run Code Online (Sandbox Code Playgroud)

java android bitmap

5
推荐指数
1
解决办法
6144
查看次数

OpenCV 3.0 findContours 崩溃

我需要检测图像中对象的轮廓。为此,我使用 OpenCV 库的 function findContours。我正在使用OpenCV 3.0 (x86)Windows 10 (x64)contrib modules.

问题

问题是,当我尝试使用此功能时,应用程序崩溃了。该错误不是异常或断言失败,我只能看到一个窗口告诉我应用程序已崩溃:

在此输入图像描述

我测试过什么

我已经检查过我传递的图像findContours是二进制图像:

我检查了图像的类型,是0,和CV_8Uvalue一样。

我什至检查了直方图,只有值为 0 和 1 的像素。

I have also searched for examples from OpenCV tutorials and forums, and I have tried to do exactly the same than in the example, and the program crashes again.

The code

Here is the code that I'm executing:

// This is the main function:
int test_findContours(const std::string &path){
    Mat …
Run Code Online (Sandbox Code Playgroud)

c++ opencv

5
推荐指数
1
解决办法
3209
查看次数

试图了解 ARM 二进制映像中的加载内存地址 (LMA) 和二进制文件偏移量

我正在ARM Cortex M4 ( STM32F4xxxx ) 中工作,我试图了解二进制文件 (*.elf*.bin) 是如何在内存中构建和闪存的,特别是在内存位置方面。具体来说,我不明白的是如何LMA从实际的二进制文件偏移量“翻译”。让我用一个例子来解释:

我有一个*.elf文件,其(相关)部分如下:(从objdump -h

my_file.elf:     file format elf32-littlearm

Sections:
Idx Name              Size      VMA       LMA       File off  Algn
  0 .text             000001c4  08010000  08010000  00020000  2**0
                      CONTENTS, ALLOC, LOAD, READONLY, DATA
  1 .bootloader       00004000  08000000  08000000  00010000  2**0
                      CONTENTS, ALLOC, LOAD, DATA
Run Code Online (Sandbox Code Playgroud)

根据该文件,VMA 和 LMA 是0x80000000x8010000,这完全没问题,因为它们在链接器脚本文件中以这种方式定义。此外,根据该报告,这些部分的偏移量分别为0x100000x20000。接下来,我执行以下命令来转储对应的内存.bootloader

xxd -s 0x10000 -l 16 my_file.elf
00010000: b007 …
Run Code Online (Sandbox Code Playgroud)

memory embedded microcontroller linker arm

5
推荐指数
1
解决办法
1662
查看次数

Javah:错误:无法访问android.support.v7.app.ActionBarActivity

我有一个javah的问题,我已经阅读了大约4或5个stakcoverflow帖子,错误"已解决",但任何事情对我有用.

我的问题:

当我执行javah命令时,我有这个错误:

Error: cannot access android.support.v7.app.ActionBarActivity
  class file for android.support.v7.app.ActionBarActivity not found
Run Code Online (Sandbox Code Playgroud)

我尝试过的:

这是我测试过的命令:

C:\Users\MyUser\workspace3\PruebaApp\jni\include>javah -classpath ../../bin/classes;C:\Users\MyUser\AppData\Local\Android\sdk\platforms\android-14\android.jar -o ACK.h com.test.prueba.ACK
Run Code Online (Sandbox Code Playgroud)

我已经尝试了同样的命令只有"/"而只有"\"用于分离目标.

我用android-11,android-14和android-21试过了.

我试图将以下外部jar添加到我的项目中:"android-support-v4.jar"和"android-support-v7-appcompat.jar"

我试图用eclipse创建一个外部构建配置,就像这里:找不到Javah Error android.app.Activity

我正在使用的工具

我在Windows 8.1上使用eclipse juno.

我执行命令的文件夹是{project_dir}/jni/include.我从不同的文件夹中尝试过它,正确地修改了命令.

包含本机函数的.java文件是包中的"ACK.java":"com.test.prueba"

在项目中,我使用的android库是android 5.0.1

我能做什么?提前致谢.

java eclipse java-native-interface android javah

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

尝试使用 jdb 附加到进程时出现的问题

我需要将 jdb 调试会话附加到在远程主机中执行的 java 应用程序,但我无法做到。我在 linux 上工作,使用 openjdk 1.8.0_65,64 位服务器 VM。

我试过的

为了启用端口侦听,我运行了 java 应用程序,在命令行中添加了以下参数:

-Xdebug -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:8000,server=y,suspend=n
Run Code Online (Sandbox Code Playgroud)

控制台中显示以下消息:

Listening for transport dt_socket at address: 8000
Run Code Online (Sandbox Code Playgroud)

应用程序开始正常运行。

然后,从远程主机,我执行以下命令:

> jdb -connect com.sun.jdi.SocketAttach:hostname=<remote_host>,port=8000
Run Code Online (Sandbox Code Playgroud)

它失败了,输出是:

java.net.ConnectException: Conexión rehusada
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
[...]
Fatal error:
Unable to attach to target VM.
Run Code Online (Sandbox Code Playgroud)

我检查过的

为了检查端口是否实际打开并且我可以从远程主机连接到它,我执行了以下操作:

让我们调用正在执行 java 应用程序的主机。hostA,以及我想要附加的那个jdb hostB,然后:

检查 hostA 中的 8000 端口上是否确实有一个套接字正在侦听

> netstat -tualpn  | grep :8000
tcp        0      0 127.0.0.1:8000          0.0.0.0:*               LISTEN      1399/<app_name>
Run Code Online (Sandbox Code Playgroud)

在hostA中,检查我是否可以连接到端口8000(换句话说,尝试从本地主机连接)

> nc …
Run Code Online (Sandbox Code Playgroud)

java debugging jdb

4
推荐指数
2
解决办法
3839
查看次数

避免 cmake 在 MacOS 中添加标志 -search_paths_first 和 -headerpad_max_install_names

我建立一个*.elf文件ARM使用MacOS的范围内cmakeCMake正在-Wl,-search_paths_first -Wl,-headerpad_max_install_name自动添加标志,这会导致生成无效*.elf文件。我得到错误warning: cannot find entry symbol arch_paths_first; defaulting to 00000000080001e0

我试图在没有这些选项的情况下执行 arm gcc 命令,它运行良好。

我怎样才能停止cmake添加这些标志?

macos arm cmake

3
推荐指数
1
解决办法
803
查看次数