我对 C++ 有点陌生,我处理一个问题已经有一段时间了,我什至不确定问题是什么。经过一些研究,我怀疑这可能是静态初始化顺序的问题。是吗?
这是代码外观的示例。由于项目的某些特性,静态构造这些变量是一个巨大的优势。
//helper1.hpp
static Helper1PartA g__h1_partA{};
static Helper1PartB g_h1_partB{};
Helper1 g_helper1{&A, &B};
//helper2.hpp
static Helper2PartA g_h2_partA{};
static Helper2PartB g_h2_partB{};
Helper1 g_helper2{&A, &B};
//user.cpp
#include "helper1.hpp"
#include "helper2.hpp"
run()
{
g_helper1.doSomething();
g_helper2.doSomethingElse();
}
即使我注释了对辅助对象的调用,如下所示,结果是相同的。
//helper1.hpp
static Helper1PartA g__h1_partA{};
static Helper1PartB g_h1_partB{};
Helper1 g_helper1{&A, &B};
//helper2.hpp
static Helper2PartA g_h2_partA{};
static Helper2PartB g_h2_partB{};
Helper1 g_helper2{&A, &B};
//user.cpp
#include "helper1.hpp"
#include "helper2.hpp"
run()
{
//g_helper1.doSomething();
//g_helper2.doSomethingElse();
}
我发现不引发错误的唯一方法是完全注释掉包含,如下所示:
//helper1.hpp
static Helper1PartA g__h1_partA{};
static Helper1PartB g_h1_partB{};
Helper1 g_helper1{&A, &B};
//helper2.hpp
static Helper2PartA g_h2_partA{};
static Helper2PartB g_h2_partB{};
Helper1 g_helper2{&A, &B};
//user.cpp
//#include "helper1.hpp"
//#include "helper2.hpp"
run()
{
//g_helper1.doSomething();
//g_helper2.doSomethingElse();
}
是否可以确认问题是我的想法?
编译器抛出以下错误:
The program contains no reference to _ctors.
The following C++ dynamic initialization routines will probably not get called:
<mangled_name_of_run> from main.cpp.o
main() (from main.c.o was probably not compiled as C++.
Unresolved symbols: 1
__pure_virtual_called from user.cpp.o