采用以下头文件示例,其中Bar是结构:
class Foo
{
...
private:
Bar _bar;
};
Run Code Online (Sandbox Code Playgroud)
我只想Bar作为私有成员变量访问Foo.声明和定义的正确方法是什么Bar?
选项1:在标题中定义?
我想避免这种情况,因为我不想Bar在Foo课堂范围之外使用.
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) 编辑:当我尝试使用具有任何挂载点的单独分区时,会发生这种情况,而不仅仅是/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 …
在嵌入式环境中(使用MSP430),我看到了部分写入非易失性存储器导致的一些数据损坏.这似乎是由写入期间的功率损耗(对FRAM或信息段)造成的.
我正在使用CRC验证存储在这些位置的数据.
我的问题是,防止这种"部分写入"腐败的正确方法是什么?目前,我已修改我的代码以写入两个单独的FRAM位置.因此,如果一个写入被中断导致CRC无效,则另一个位置应保持有效.这是一种常见做法吗?我是否需要为任何非易失性存储器实现这种双写行为?
我发现了一些类似于以下内容的遗留代码.说我有以下定义:
#define FOO(x) bar
Run Code Online (Sandbox Code Playgroud)
x从未在定义中引用.那么,这是否意味着FOO()中放置的任何文本都无关紧要?
我正在看的代码散布着调用,例如FOO(someValue);我假设预处理器正在简单地替换整个语句bar,无论是什么someValue?有点因为什么存在而被抛弃x.