繁体   English   中英

C++ 使用调试版static库时成员变量未初始化

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

  • 环境:Windows10,cpp17,visual studio 2019,debug版本static库

最近在我的项目中尝试使用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 construct function时,它发生了变化。 也许是因为调试 static lib 的生成?

任何建议将不胜感激!

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM