小编sch*_*574的帖子

在哪里定义struct只能用作私有成员变量?

采用以下头文件示例,其中Bar是结构:

class Foo
{
    ...
private:
    Bar _bar;
};
Run Code Online (Sandbox Code Playgroud)

我只想Bar作为私有成员变量访问Foo.声明和定义的正确方法是什么Bar

选项1:在标题中定义?

我想避免这种情况,因为我不想BarFoo课堂范围之外使用.

struct Bar
{
    int a;
    int b;
    ...
};

class Foo
{
    ...
private:
    Bar _bar;
};
Run Code Online (Sandbox Code Playgroud)

选项2:在头文件中转发声明,在cpp中定义?

不确定这是否合法,如果编译器的定义不直接可用,编译器将如何Foo严格地知道标题的大小Bar?此外,这会隐藏Bar其他包含标题的文件吗?

标题:

struct Bar;

class Foo
{
    ...
private:
    Bar _bar;
};
Run Code Online (Sandbox Code Playgroud)

实施文件:

struct Bar
{
    int a;
    int b;
    ...
};
Run Code Online (Sandbox Code Playgroud)

选项3:在课堂上宣布

也许是限制范围的最佳选择,但可能是凌乱的

class Foo
{
    ...
private:
    struct Bar
    { …
Run Code Online (Sandbox Code Playgroud)

c++

12
推荐指数
2
解决办法
3423
查看次数

启动期间自动挂载单独分区时systemd/udev依赖性失败

编辑:当我尝试使用具有任何挂载点的单独分区时,会发生这种情况,而不仅仅是/var.

我正在使用Buildroot来构建嵌入式Linux系统.我正在尝试为/ var使用单独的分区,但这适用于任何挂载点.我的init系统是systemd,udev用于设备管理.我把我的fstab编辑为:

# <file system> <mount pt>     <type>   <options>                <dump> <pass>
/dev/root       /              ext2     rw,noauto                0      1
/dev/mmcblk0p4  /var           ext2     defaults                 0      2
proc            /proc          proc     defaults                 0      0
devpts          /dev/pts       devpts   defaults,gid=5,mode=620  0      0
tmpfs           /dev/shm       tmpfs    mode=0777                0      0
tmpfs           /tmp           tmpfs    defaults                 0      0
sysfs           /sys           sysfs    defaults                 0      0
tmpfs           /run           tmpfs    defaults                 0      0
Run Code Online (Sandbox Code Playgroud)

一旦系统启动,我收到一条消息" Expecting device dev-mmcblk0p4.device ... ",最后接着是:

" 等待设备dev-mmcblk0p4.device超时. "

" / var的依赖失败 "

" 本地文件系统的依赖性失败. "


如果我使用/var2 …

linux udev buildroot systemd

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

如何在断电时防止"部分写入"数据损坏?

在嵌入式环境中(使用MSP430),我看到了部分写入非易失性存储器导致的一些数据损坏.这似乎是由写入期间的功率损耗(对FRAM或信息段)造成的.

我正在使用CRC验证存储在这些位置的数据.

我的问题是,防止这种"部分写入"腐败的正确方法是什么?目前,我已修改我的代码以写入两个单独的FRAM位置.因此,如果一个写入被中断导致CRC无效,则另一个位置应保持有效.这是一种常见做法吗?我是否需要为任何非易失性存储器实现这种双写行为?

memory embedded msp430 non-volatile

7
推荐指数
3
解决办法
2881
查看次数

#define FOO(x)bar,x从未在定义中引用,会发生什么?

我发现了一些类似于以下内容的遗留代码.说我有以下定义:

#define FOO(x) bar
Run Code Online (Sandbox Code Playgroud)

x从未在定义中引用.那么,这是否意味着FOO()中放置的任何文本都无关紧要?

我正在看的代码散布着调用,例如FOO(someValue);我假设预处理器正在简单地替换整个语句bar,无论是什么someValue?有点因为什么存在而被抛弃x.

c-preprocessor

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