我在 c++ 类的这些静态成员初始化方面遇到了麻烦。有关更多信息,请参阅我的代码。
来源
头文件.h
#ifndef HEADER_H
#define HEADER_H
#include <string>
using namespace std;
class Staff{ public: static string str;};
class Boss{ public: static string str;};
#endif
员工.cpp
#include "header.h"
string Staff::str = "(staff)";
老板.cpp
#include "header.h"
string Boss::str = "I call " + Staff::str;
主文件
#include <iostream>
#include "header.h"
int main(){cout << Boss::str << endl;}
这里有许多不同结果的编译代码:
预编译:
g++ -c boss.cpp
g++ -c staff.cpp
ar rcs lib.a boss.o staff.o
ar rcs rlib.a staff.o boss.o
编译、运行和结果:
g++ main.cpp staff.cpp boss.cpp ; ./a.out
==> I call (staff)
g++ main.cpp boss.cpp staff.cpp ; ./a.out
==> segmentation fault (core dumped)
g++ main.cpp lib.a ; ./a.out
==> segmentation fault (core dumped)
g++ main.cpp rlib.a ; ./a.out
==>segmentation fault (core dumped)
我想在编译时使用库存档而不是与巨型对象顺序混淆。帮我解决它们。