小编Dee*_*ool的帖子

如何在C库的实现文件中使用C++ STL容器?

假设我希望在我希望C程序链接到的库的实现中使用C++ STL容器...

我的示例标题是

/* mynums.h */
#ifndef MY_NUMS
#define MY_NUMS

#ifdef __cplusplus
extern "C" {
#endif

void append_num(int num);
void print_nums();

#ifdef __cplusplus
}
#endif

#endif
Run Code Online (Sandbox Code Playgroud)

我的示例实现文件是

/* mynums.cpp */
#include "mynums.h"
#include <vector>

using std::vector;

vector<int> nums;

void append_num(int num)
{
    nums.push_back(num);
}

void print_nums()
{
    for (int i = 0; i < nums.size(); i++)
    {
        printf("%d, ", nums[i]);
    }
    printf("\n");
}
Run Code Online (Sandbox Code Playgroud)

我的申请看起来像

/* app.c */
#include "mynums.h"

int main()
{
    append_num(1);
    append_num(2);
    append_num(3);
    print_nums();

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

我编译这些的命令是 …

c c++ gcc g++ shared-libraries

9
推荐指数
1
解决办法
376
查看次数

如何让NTP使用自定义I/O引脚?

我有一个带I/O引脚的主板,我编写了一个C库,其中包含设置和查询这些I/O引脚状态的功能.假设其中一个函数的名称是get_pin(int pin_no),它返回该引脚的逻辑电压.我想向我的一个引脚发送1脉冲/秒(PPS)信号,并告诉Linux的NTPD根据该信号进行校准.

是否有可能告诉NTPD使用其中一个I/O引脚作为其PPS?如果是这样,这样做的方法是什么?IE浏览器.是通过配置文件还是需要修改NTPD的源代码?我早期的研究似乎表明后者可能是必要的.

编辑:我正在使用Centos上的ntpd

ntp

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

cout 可以抛出异常吗?

这向我表明 cout 可以抛出异常。这是真的?什么样的场景会迫使这个?

c++ cout ostream

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

为什么“系统”的返回与所调用脚本的返回不匹配?

我有一个简单的脚本

#!/usr/bin/bash
# exit5.bash
exit 5
Run Code Online (Sandbox Code Playgroud)

我用交流程序中的系统来称呼它

#include <stdlib.h>
#include <stdio.h>

int main()
{
    int ret = system("./exit5.bash");
    printf("%d\n", ret);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我看到1280打印到屏幕上,这与 5 << 8

为什么我看不到常规5?

c linux system

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

如何在 Python 中递归创建类属性?

Python 支持“动态”创建属性,就像这样。

class MyClass:
    def __init__(self):
        pass

x = MyClass
x.new = 5
print(x.new)  # prints 5
Run Code Online (Sandbox Code Playgroud)

但这有点难看。我必须在类中有一些指令,函数或类属性定义。

但主要的障碍是...

x.first.second = 1  # this will raise
Run Code Online (Sandbox Code Playgroud)

它提高是因为 first 显然不存在。我将不得不做这样的事情。

x.first = MyClass()
x.first.second = 1
print(x.first.second)
Run Code Online (Sandbox Code Playgroud)

我想根据需要递归创建属性。这可能吗?

python

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

为什么Perl中的lt和gt不能用于比较实数?

让我们检查以下perl代码

if ($a lt 0.00 or $a gt 100.000)
{
    print "a must be between 0 and 100 \n";
    exit 1
}
exit 0
Run Code Online (Sandbox Code Playgroud)

让我们说a等于5.上面的代码将以失败状态退出,因为a不在0到100之间.

只需简单地更换lt,并gt与他们所代表的实际经营者<,并>分别产生预期的结果.用以9开头的数字替换100也将产生预期结果.

为什么Perl的比较运算符告诉我5不在0到100之间?

perl

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

为什么绑定无法通过引用传递?

我发现使用std :: bind时,引用传递往往不起作用.这是一个例子.

int test;

void inc(int &i)
{
    i++;
}

int main() {
    test = 0;
    auto i = bind(inc, test);
    i();
    cout<<test<<endl; // Outputs 0, should be 1
    inc(test);
    cout<<test<<endl; // Outputs 1
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当通过使用std bind创建的函数调用时,为什么变量不会递增?

c++ stdbind

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

为什么子类的std :: is_same为false?

为什么子类B与基类A不同?

我知道B是A但A不是B,但如果is_same在这些情况下没有返回true,那么我觉得它的使用是有限的.

在这种情况下,是否存在可以返回true的std函数?

c++ std type-traits

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

为什么perl的本地时间似乎输出错误的月份?

我已经看到了其他答案,但由于某种原因,它们并不适合我.

我试图使用以下代码在Perl脚本中获取昨天的日期.

供将来参考,今天的日期是2015年11月12日

my (undef, undef, undef, $mday,$mon,$year) = localtime();
my $prev_day = timelocal(0, 0, 0, $mday-1, $mon, $year);
(undef, undef, undef, $mday,$mon,$year) = localtime($prev_day);
$year += 1900;

print "Yesterday's Day: $mday, Month: $mon, Year: $year\n";
Run Code Online (Sandbox Code Playgroud)

除了我的输出看起来像这样

Yesterday's Day: 11, Month: 10, Year: 2015.
Run Code Online (Sandbox Code Playgroud)

我应该读昨天的日期Day: 11, Month: 11, Year: 2015.为什么减去月份?

编辑:这与建议的答案不同,因为我想知道为什么当地时间似乎写错了月份.

perl date

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

为什么MOD​​E_WORLD_READABLE被划掉?

我正在开发一个Android应用程序,我需要将数据写入文本文件,以便稍后在其他活动中阅读.这是我的代码正文.

        //writes the string "hello android" to file
        FileOutputStream outFile = openFileOutput("myfile.txt", MODE_WORLD_READABLE);
        OutputStreamWriter osw = new OutputStreamWriter(outFile);
        String hello = "hello android.";
        osw.write(hello);
        osw.flush();
        osw.close();
Run Code Online (Sandbox Code Playgroud)

当我第一次写这段代码时,我收到了一个警告,所以我添加了这一行

@SuppressWarnings("deprecation")
Run Code Online (Sandbox Code Playgroud)

到我的功能的顶部.但是,我的IDE中仍然会删除MODE_WORLD_READABLE.为什么?注意:该函数具有try-catch语句,它们应该是,并且"在函数顶部抛出IOException.

java eclipse android adk

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

如何在 GNU Plot Graph Range 中设置精度?

我在我的情节中设置了这样的范围

set yrange[ 0.000 : 0.040 ]
Run Code Online (Sandbox Code Playgroud)

并且图形在 y 轴上的间隔为 0.005。y 轴读作

0.04
0.035
0.03
0.025
0.02
0.015
0.01
0.005
0
Run Code Online (Sandbox Code Playgroud)

在图表的一侧。这看起来完全不一致。

我怎样才能让它显示每个 tic 的千分之一的精度?

gnuplot

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

如何使用Allegro Bitmaps使用智能指针?

我已经决定我已经厌倦了决定哪些类负责删除哪些位图.我试图重写我的代码以使用自定义删除器的智能指针al_destroy_bitmap

我的代码非常简单.

shared_ptr<ALLEGRO_BITMAP> test = make_shared<ALLEGRO_BITMAP>(al_load_bitmap("hello.png"), al_destroy_bitmap);
Run Code Online (Sandbox Code Playgroud)

我遇到了一些我似乎无法解决的错误.

error C2079: 'std::_Get_align<ALLEGRO_BITMAP>::Elt2' uses undefined struct 'ALLEGRO_BITMAP'
error C2079: 'std::_Get_align<ALLEGRO_BITMAP>::Elt0' uses undefined struct 'ALLEGRO_BITMAP'
error C2027: use of undefined type 'ALLEGRO_BITMAP'
error C2027: use of undefined type 'ALLEGRO_BITMAP'
Run Code Online (Sandbox Code Playgroud)

解决我的问题的其他解决方案是创建一个Bitmap类来包装所有Allegro的东西,但这看起来很难看,我认为我不应该这样做.另外,我已经到处使用其他的allegro函数,然后我想为ALLEGRO_SAMPLE和编写相同类型的类ALLEGRO_FONT.我真的不喜欢这样做.

如何在Allegro位图中使用智能指针?

编辑:也许为非Allegro编码员提供ALLEGRO_BITMAP如何工作的感觉,我将在下面发布一些代码

ALLEGRO_BITMAP *test = al_load_bitmap("hello.png") // This works
ALLEGRO_BITMAP test1; // This fails with error C2079 undefined struct ALLEGRO_BITMAP. I expect this here.
Run Code Online (Sandbox Code Playgroud)

c++ smart-pointers allegro allegro5

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