vto*_*c85 4 c++ arrays static constructor initialization
我有这些课程:
class FS{
static char mount(Partition* p)
{return myImpl->mount(p);}
/*...*/
KernelFS* myImpl;
};
class KernelFS{
char mount(Partition* p){
/*...*/
while(available[i]) i++;
}
/*...*/
static bool available[26];
};
Run Code Online (Sandbox Code Playgroud)
主程序仅使用FS的静态函数,例如:
void main(){
Partition* p=/*...*/;
FS::mount(p);
/*...*/
}
Run Code Online (Sandbox Code Playgroud)
当调用FS :: mount(p)时,它调用myImpl-> mount(p)(这是来自KernelFS类的函数).这就是问题所在.到那个时刻
while(available[i]) i++;
Run Code Online (Sandbox Code Playgroud)
......它破了!我认为问题是我没有初始化可用的阵列[26],我不知道该怎么做......还有什么问题呢?请帮忙.
顺便说一句,main()从不创建FS或KernelFS对象,所以我认为没有使用构造函数...
Alo*_*ave 10
您需要在(确切地)一个cpp文件中定义它:
bool KernelFS::available[] = {0};
Run Code Online (Sandbox Code Playgroud)
问题是数组永远不会分配任何内存.您应该在全局范围中添加它:
bool KernelFS::available[] = {false};
Run Code Online (Sandbox Code Playgroud)
确保在一个cpp文件中执行此操作.将其添加到多个cpp文件中将导致链接期间出现重复的符号错误.此外,您不应该在头文件中执行此操作.最好的方法是在cpp文件中添加KernelFS该类以实现该类.
另请注意,不保证跨编译单元的静态初始化顺序.因此,您不应该KernelFS::mount()从另一个文件中的静态初始化代码调用.