[英]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 construct function时,它发生了变化。 也许是因为调试 static lib 的生成?
任何建议将不胜感激!
通过仔细检查正确运行原始项目和我的项目的所有设置来解决问题。 并尝试清理 Visual Studio 缓存并重建项目和库可能有助于解决问题。
起初我对 inlucde 和 lib 文件使用了不同的库版本,然后我发现,我将相同版本的库包含文件更改为我的项目。 但是由于 VS 缓存和相同的文件名(我猜),更改实际上未能应用于我的项目。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.