【发布时间】:2017-08-11 20:39:14
【问题描述】:
我正在尝试在 c++ 中增加 LARGE_INTEGER,但出现以下错误。
错误 C2397:从“LONGLONG”到“DWORD”的转换需要缩小转换
我不知道我做错了什么。这是一个非常简单的问题,我试图重建项目,但错误不会消失。
std::atomic<LARGE_INTEGER> value; // this field is defined in header
这些行是我尝试过的,它们都给出了相同的错误。
// inside a method in cpp
value = {get_some_large_integer().QuadPart + 1};
value = LARGE_INTEGER{get_some_large_integer().QuadPart + 1};
value = static_cast<LARGE_INTEGER>(LARGE_INTEGER{get_some_large_integer().QuadPart + 1});
【问题讨论】:
-
是的,我必须使用
LARGE_INTEGER,因为我仅限于使用这种数据类型的库窗口函数。是的,value = {get_some_large_integer()};也适用于我,但value = {get_some_large_integer().QuadPart};给出了错误。似乎递增不是问题,但访问 QuadPart 是一个问题。 @CodyGray -
@CodyGray 我明白了,但是 ctor 不接受 64 位值很奇怪。如果它的 64 位值应该有,那就太奇怪了!
-
它正在从
li.QuadPart初始化一个LARGE_INTEGER,这就是问题所在。不用std::atomic试试。你会遇到同样的问题。无法直接从 64 位值构造LARGE_INTEGER(因为不幸的是,C++ 没有 designated initializers)。您需要使用两个 32 位半部分来构建它。我不知道这里有一个好的解决方案。也许其他人会。 -
自 VS 2008 以来,我在处理 64 位整数时从未遇到任何问题。问题可能是由于 LARGE_INTEGER 是一个联合,而不是一个结构。
标签: c++ compiler-errors increment