0

我对 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 
4

0 回答 0