[英]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.