问题标签 [msvc12]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++11 - visual studio 2013 std::bind with vector returns empty function
This code
compiles fine by MSVC 2013, but when I run the program it prints
If I give the constructor for struct S
(uncomment the tenth line) it prints four ok
.
When I compiled this code (without constructor) by GCC, it printed four ok
Q: is there a bug in MS's compiler or I'm doing something wrong and I'm just "lucky" with GCC ?
P.S. My studio is "Microsoft Visual Studio Ultimate 2013". Version: "12.0.21005.1 REL"
c++ - CMake 使用 ExternalData 生成的 Visual Studio 2013 解决方案引发 MSB8031 错误
当我使用 CMake 添加测试目标时ExternalData
,即
Visual Studio 2013 (MSVC 12) 抛出此构建错误:
我花了很长时间才把它缩小到这个范围。我很困惑,因为我在兄弟项目的另一个 CMake 文件中做了几乎完全相同的事情,加上实际的测试版本。似乎ExternalData_Add_Test
正在向 CMake 构建的解决方案添加非 unicode 测试或其他内容。
我确实add_definitions(-DUNICODE -D_UNICODE)
在父 CMake 文件中进行了设置。
更令人困惑的是,它构建在我的本地系统(以及所有非 MSVC 编译器)上,而不是在我们的 CI 构建系统上(......重要的地方。),即使环境是相同的。
c++ - 无法在 Boost.Python 中使用 __stdcall 编译示例
我正在尝试使用 Python 包装一个函数,但在Boost.Python
使用__stdcall
. 这是一个例子:
当我尝试编译时,我得到了 100 多个类似的错误,但前 2 个是:
错误 C2780: 'boost::mpl::vector10::type&,T0,T1,T2,T3,T4,T5,T6,T7> boost::python::detail::get_signature(RT (__thiscall ClassT::* ) (T0,T1,T2,T3,T4,T5,T6,T7) const,Target *)': 需要 2 个参数 - 提供 1 个 C:\boost\boost_1_62_0_python\boost\python\make_function.hpp 104
错误 C2780: 'boost::mpl::vector10::type&,T0,T1,T2,T3,T4,T5,T6,T7> boost::python::detail::get_signature(RT (__thiscall ClassT::* ) (T0,T1,T2,T3,T4,T5,T6,T7) volatile const,Target *)': 需要 2 个参数 - 提供 1 个 C:\boost\boost_1_62_0_python\boost\python\make_function.hpp 104
如您所见,我使用了此页面BOOST_PYTHON_ENABLE_STDCALL
中提到的 define :
但是无论是否定义它,问题都保持不变。
有谁知道我做错了什么?
build - 是否可以在 Windows 上构建 ffmpeg x64?
真正的答案可能是“不”,但仍然只是为了仔细检查。有没有人能够在 Windows(VS2013 或 VS2015)上构建 ffmpeg x64?我知道如果没有大量修改,公开可用的资源是不可能的。但是,如果有人这样做并且他愿意分享一些提示......
编辑:有趣的是,运行“配置”所需的大多数 x64 工具是如何在没有依赖关系的情况下分发的,并且不可能在任何地方获得它们。看起来像一个专业的拖钓。
Edit2:有成千上万这样的错误:
features.h 缺少许多其他头文件。有没有解决办法,或者切换到 Linux 是唯一的选择?
c++ - vs2015中的方法存在检查器代码中断
以下代码检查类 A 中是否存在 foo() 方法。此代码在 vs2013 下编译,但在 vs2015 上静态断言失败。哪个编译器版本说的是实话?如果是vs2015,那么如何修复代码?
c++ - 编译器将这个指针移动到错误的地址
我有一个简单的多态构造,只有一个纯虚函数Foo
。它使用的大型项目中唯一的缺陷是该项目使用了几个全局静态来集中参数加载和事件记录(不能轻易摆脱遗留代码)。
项目信息:
- 平台工具集:
v110_xp
- 静态库中的 MFC
- MBCS 字符集
- 调用约定:
__cdecl
- 禁用所有优化
- 警告级别4,整个项目没有警告
代码:
调用代码(没关系,到处都是相同的行为)
问题是,当在调试中运行时(未通过发布测试),当我们最终进入 functionFoo
时,this
指针被“损坏”:
this = 0xcccccccc
this.__vfptr = <unable to read memory>
当我深入研究输入函数的汇编代码时,我看到以下内容:
第 17 行的断点,就在进入函数体之前:使用监视窗口检查寄存器后面的对象ecx
(带有强制转换为Derived*
)显示ecx
包含我需要的指针(指向对象),但由于某种原因,它被mov
'ed to看似随机的地址[esp+0F0h]
。
现在真正有趣/令人惊叹的部分:当我改变时
至
并再次编译,一切都神奇地工作。功能程序集现在已更改为:
现在生成的代码很好地将寄存器中的指针移动ecx
到this
. 其他区别:
- 不同的内存地址/偏移量
mulsd
而不是xorpd
否定变量and esp,0FFFFFFF8h
消失(??用于对齐堆栈指针esp
??)- 更多清理(在函数体之后)??(
add cmp call
)
对于这两种情况,参数被推送到堆栈的装配部分是相同的:
当然,当我尝试使用最小、完整和可验证的示例来复制它时,一切都按预期进行。但在我的大项目中,它一直失败。我不确定哪些参数会影响编译,并且对汇编了解得不够多,甚至看不到那里发生了什么;因此,我在这里问是希望有人以前见过或认识到这种行为。
注意:当我删除sqrt
呼叫时,它也可以再次工作。
更新:
- 发布没有问题
- VS2012 SP4 (v11.0.61030.00)
- 引用成员变量时问题仍然存在(iso 没有成员引用)
- TODO:尝试不使用全局静态变量
c++ - 无法将字符串文字分配给装箱的 std::string 向量
这是我的类型系统的简化版本:
虽然编译,a
但没有,原因似乎是我尝试从. 这提出了两个问题:b
c
const char
为什么
b
可能但不可能c
?是因为嵌套的模板std::vector<Box<std::string> >
吗?我可以
c
在不破坏一般拳击机制的情况下工作(参见typedef Box<double> Double
?