我有一个用C语言编写的库。在库中有一个我需要使用的变量 在foo.h(在C中)
extern mystruct foobar;
在bar.h中(使用C ++) 我有以下课程。
#include foo.h
class myfoo {
private:
mystruct foobar;
}
我想知道的是,如果我创建一个myfoo数组,foobar的每个实例都会引用相同的变量,或者每个实例都是它自己独立于其他myfoo foobar的myfoo实例吗? / p>
答案 0 :(得分:5)
以下是此交易:您foo.h
使用foobar
的{{1}}变量 <(特别是{1}} < em>声明 bar.h
,定义必须在实现文件中)。相反,您将在类的范围内重新声明具有相同名称和类型的变量。
这样,实例成员变量的所有常规规则都适用。特别是,foo.h
的每个实例都有自己的foobar
实例。
如果您从myfoo
删除了声明,则不会发生任何变化:声明与您的foobar
文件完全无关。
答案 1 :(得分:3)
foobar
类定义中的myfoo
成员定义在与全局范围内foobar
不同的范围内。它们是不同的变量,彼此无关,除了它们属于同一类型,并且碰巧具有相同的名称(尽管在不同的范围内)。
如果您创建一个myfoo
个对象数组,则每个对象都会有mystruct
个实例。所有这些实例都将与全球范围内声明的实例分开。
答案 2 :(得分:0)
我想知道的是,如果我创建一个myfoo数组,每个都是 foobar的实例引用相同的变量,或者每个变量 实例是它自己独立的myfoo的唯一实例化 来自其他myfoo foobars?
如果你这样做:
#include foo.h
class myfoo
{
private:
mystruct foobar;
};
void func()
{
myfoo f[3];
// ...
}
您创建了3个不同的 myfoo 对象,每个对象都有自己的 foobar 实例。
如果您按如下方式更改myfoo声明:
#include foo.h
class myfoo
{
private:
static mystruct foobar;
};
// this extra declaration is required for
// static member variables
mystruct myfoo::foobar;
void func()
{
myfoo f[3];
// ...
}
然后 myfoo的三个实例将共享他们的foobar单个实例。
注意强>:
class myfoo
声明可以是“.h”或“.cpp”文件。
mystruct myfoo::foobar;
声明只能出现一次,因此它通常必须位于“.cpp”文件中(或“.cc”或您使用的任何内容)。