簡體   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