使用调试版本静态库时,C++ 成员变量未初始化

C++ member variables are not initialized when using a debug version static library

最近在我的项目中尝试使用Cesium-Native来读取3DTiles文件,但是遇到了一些成员变量没有正确初始化的困惑问题。 如下代码所示,Tileset()使用初始化列表来初始化其成员变量,但其中一些像_loadsInProgress_previousFrameNumber被初始化为随机值,应该为0。但是其中一些被初始化正确地类似于 _url_options,并且它在 Release Library 中运行良好,并且在其原始项目中具有相同的代码。多么奇怪的错误!

Tileset::Tileset(
    const TilesetExternals& externals,
    const std::string& url,
    const TilesetOptions& options)
    : _externals(externals),
      _asyncSystem(externals.asyncSystem),
      _userCredit(
          (options.credit && externals.pCreditSystem)
              ? std::optional<Credit>(externals.pCreditSystem->createCredit(
                    options.credit.value(),
                    options.showCreditsOnScreen))
              : std::nullopt),
      _url(url),
      _isRefreshingIonToken(false),
      _options(options),
      _pRootTile(),
      _previousFrameNumber(0),
      _loadsInProgress(0),
      _subtreeLoadsInProgress(0),
      _overlays(*this),
      _tileDataBytes(0),
      _supportsRasterOverlays(false),
      _gltfUpAxis(CesiumGeometry::Axis::Y),
      _distancesStack(),
      _nextDistancesVector(0) {
  if (!url.empty()) {
    CESIUM_TRACE_USE_TRACK_SET(this->_loadingSlots);
    this->notifyTileStartLoading(nullptr);
    LoadTilesetDotJson::start(*this, url).thenInMainThread([this]() {
      this->notifyTileDoneLoading(nullptr);
    });
  }
}

通过调试发现_loadsInProgress一开始是0,调用vector构造函数时发生变化。可能是因为生成调试静态库?

如有任何建议,我们将不胜感激!

通过仔细检查 运行 中的所有设置正确地解决了原始项目和我的项目的问题。并尝试清理 Visual Studio 缓存并重建项目和库可能有助于解决问题。

起初我对inlucde和lib文件使用不同的库版本,然后我发现,我将相同版本的库include文件更改为我的项目。但是由于 VS 缓存和相同的文件名(我猜),更改实际上未能应用到我的项目。