首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用调试版本静态库时,未初始化C++成员变量。

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

Stack Overflow用户
提问于 2022-04-22 13:18:07
回答 1查看 217关注 0票数 0
  • 环境: Windows10,cpp17,visual studio 2019,调试版本静态库

最近,我尝试使用铯本机在我的项目中读取3 3DTiles文件,但有一个令人困惑的问题,一些成员变量未被正确初始化。如下代码所示,Tileset()使用初始化器列表初始化其成员变量,但其中一些变量(如_loadsInProgress_previousFrameNumber )被初始化为应该是0的随机值。但是,它们中的一些是正确初始化的,比如_url_options,它在Release和其原始项目中的相同代码中工作得很好。多么奇怪的虫子啊!

代码语言:javascript
运行
复制
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,当调用向量构造函数时,它会发生变化。也许是因为生成了调试静态库?

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-28 06:32:13

通过仔细检查所有设置,正确运行原项目和我的项目,解决了问题。并且尝试清理并重新构建项目和库可能有助于解决这个问题。

首先,我对include和lib文件使用了不同的库版本,然后我发现,我将同一个版本库包含的文件更改为我的项目。但是由于VS缓存和相同的文件名(我猜),更改实际上没有适用于我的项目。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71969416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档