问题标签 [visual-c++-2010]
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++ - 相关的非类型模板参数
考虑以下类:
在 VC++ 2010 和 Comeau C++ 上测试时,上面的类大纲按预期编译和运行。但是,当Foo
被制作成模板本身时,上面的代码片段在 VC++ 2010 下会中断。
例如,以下代码段:
产生以下错误类:
- 有人可以用简单的英语解释这里发生了什么吗?
- 如何
Foo
在 VC++ 2010 上解决这个问题(即,在模板中保留内部伪显式专业化)?
c++ - 模板类中的静态 const 成员初始化
我有一个关于“静态常量”成员初始化的问题。在模板类中,我定义了一个 const 成员并在类外对其进行初始化。
当我包含在多个 .cpp 文件中实现此类的 .h 文件时,我收到一个LNK2005 错误(我正在使用 VS2010),表示该常量已定义。
我尝试将成员初始化放在 .cpp 文件中,但随后出现链接器错误,提示根本没有定义常量。如果列表没有模板化并且我将初始化放在 .cpp 文件中,一切都很好。
这种情况有什么解决办法吗?我已经在文件周围有#ifdef/define 子句,这绝对不是解决方案。
c++ - Visual Studio 2010 x64 上的 C++ 链接错误
我正在将 C++ 代码库从 VS2005 升级到 VS2010,并且我正在重建一些第三方 C++ 依赖项。我构建这些 32 位没有问题,但在链接 64 位 (x64) 时遇到问题。我正在为许多标准库函数获取未解决的外部。例如:
我尝试将 msvcprtd.lib 显式添加到链接行并启用库解析调试,它似乎正在搜索 C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib\amd64\msvcprtd.lib 符号但不是找到他们。
有人知道为什么会这样吗?
c++ - 模板函数特化默认参数
它在令牌上的函数默认参数行上给出语法错误 C2689 和 C2059 ::
。但没有专业化,它做得很好。如果我更改默认参数并仍在进行专业化:
问题也消失了。
现在如果我这样使用它:function<int>(1,2,3);
或者function<float>(1.0f)
它很好,所以看起来如果模板函数是专门的,我们必须在调用它时重写默认参数?
但是在我的第二种情况下,我在调用时替换std::numeric_limits<T>::..
为T(..)
没有语法错误function<int>(1)
,这是为什么呢?
(我正在使用 Visual Studio 2010 x64)
由于最初的问题是由于错误,现在问题变成了如何解决它?
asynchronous - unbounded_buffer、_CrtSetDbgFlag 和内存泄漏
我正在尝试使用其中一项新功能 - 异步代理库。我刚刚添加了一个
unbounded_buffer m_myDataBuffer; 到我的 C++ 类,仅此而已 - 还没有代理运行。
为了在我的应用程序中启用内存泄漏检测,我使用:
但是在关闭我的应用程序窗口后(我使用的是简单的 Win 32 GUI 应用程序)Visual Studio 显示了一堆内存泄漏:
在我注释掉之后泄漏就消失了
或者在我注释掉之后
unbounded_buffer 有什么特别之处吗?即使不使用,我也必须释放它?还是我需要以某种特殊方式设置 _CrtSetDbgFlag?_CrtSetDbgFlag 是内存泄漏的原因,还是在这种情况下以某种方式创建错误检测并且没有真正的内存泄漏?我在这里想念什么?
我 100% 确定这些泄漏不是来自我的代码,因为我也有
在我的 stdafx.h 中,所以我的代码中的内存泄漏具有文件名和行。但是那些 unbounded_buffer 没有这样的信息,所以我猜这意味着它们来自代理库。
visual-studio-2010 - 自定义操作系统上的 STL - std::list 有效,但 std::vector 无效
我只是在 Visual Studio 2010 中使用 grub 可引导的 C++ 内核。
我已经到了写新和删除的地步,并且动态分配的数组之类的东西可以工作。例如,我可以使用 STL 列表。在我编写了一个 memcpy 例程之后,我什至可以对它们进行排序。问题是当我使用 std::vector 类型时。只需构造向量即可将内核发送到 la la land。
显然我错过了某种功能实现,但我通过 STL 搜索它并空手而归。它在 push_back 失败:
消失在以太中。
关于我缺少什么的任何猜测?
编辑是的,它是 int 的向量。对困惑感到抱歉。不仅如此,它失败的不是构造函数,而是对 push_back 的调用。
c++ - 在 VC 2010 中禁用 C++0x 功能?
VC++ 2010 中的 C++0x 模式是否有关闭开关?我正在开发一个应该在非 0x 编译器上编译的项目,因此我想根据当前标准进行编译。(即使没有直接使用任何新功能,仍然存在使 C++0x 更具前提性的细微之处)。
我找到的最近的开关是,Configuration Properties -> C/C++ -> Language -> Disable Language Extensions
但不是这样。
c++ - 将 make_shared 与受保护的构造函数 + 抽象接口一起使用
给定一个抽象接口和一个从该接口派生的实现,其中构造函数受到保护(这些对象的创建只能从类工厂获得 - 以实现 DI 模式),我如何在工厂函数中使用 make_shared ?
例如:
make_shared 显然无法访问 InterfaceImpl 或 IInterface 中的受保护构造函数,给我以下错误
所以在这里阅读(问题:如何使 boost::make_shared 成为我班的朋友),我尝试将以下内容放入实现类中:
它仍然无法编译。因此,我也将另一个放入 IInterface 类。仍然没有喜悦。我在这里做错了什么?
编辑:用于编译的完整源文件,带有“朋友”...
c++ - 如果类继承自 2 个模板化父类,则调用不明确。为什么?
我有一个模板类,它对作为模板参数给出的类执行操作。对于我的一些课程,我想将功能“分组”到一个课程中,以使调用者更容易。实际上,代码看起来像这样(名称已更改):
问题是,当我使用 CustomerOrder 作为参数调用 ProcessingFrontEnd::process 时,编译器会抱怨它。
我试图在一个较小的测试应用程序中重现该问题。这是代码:
事实上,如果这是编译的,微软的 VS2010 编译器会给出这个错误:
我在调用中使用不同类型(char+void*、double+void*)和不同参数('c'、3.14)测试了这个测试应用程序,但错误消息始终相同。
I tested this with VS2005 and VS2010 but I always get the same error.
Why can't the compiler determine the correct function to call? What makes this confusing for the compiler? Or is it just a bug in the Microsoft compiler?
EDIT: If I explicitly add 2 push_back methods to my class, like this:
The compiler doesn't complain anymore. So with these methods he can clearly distinguish between a character and a void-pointer. Why can't he do this if the two push_back methods are inherited from the parent?
visual-studio-2010 - MSVC++ 2010 中的 Intellisense 质量和稳定性是否得到了改进?
对于那些从 2008 年升级到 2010 年的人来说,真的有两个不同的问题:
- 就完整性而言,智能感知在这个版本中工作得更好吗?
- 它是否仍然遭受损坏的 NCB 文件和其他性能/稳定性问题?