升级到VC++ 2010后,在构建使用C#项目中的强类型数据集的C++/CLI项目时,会引发警告C4564(方法定义不支持的默认参数).
ReadersManager.cpp(311):警告C4564:类'System :: Data :: DataTable'的方法'SetNewRecord'定义了不支持的默认参数'action'
调用方法时显式指定值"2"
从程序集"System.Data,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089"导入类型"System :: Data :: DataTable"时发生此诊断.
从程序集'System.Data.DataSetExtensions,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'导入类型'System :: Data :: TypedTableBase'时发生此诊断.
从程序集"MyProductDataStoreCLR,Version = 4.5.0.9,Culture = neutral,PublicKeyToken = null"导入类型"MyProductDataStoreCLR :: ReadersDataSet :: ReadersDataTable"时发生此诊断.
警告是在调用时引发的System::Data::DataTable::Select,因此我无法在与之相关的调用代码中进行任何更改SetNewRecord.
这是C++/CLI不支持新的C#可选参数功能的问题吗?
warnings c++-cli strongly-typed-dataset visual-c++ visual-c++-2010
编译此代码时:
#include <windows.h>
int WINAPI WinMain(HINSTANCE hInsance,HINSTANCE hPrevInstance,PSTR cmdLine,int showCmd){
MessageBox(0,"First Win32 Program","Window Tittle",MB_OK);
}
Run Code Online (Sandbox Code Playgroud)
我收到编译器错误:
错误C2664:'MessageBoxW':无法将参数2从'const char [20]'转换为'LPCWSTR'1>指向的类型不相关; 转换需要reinterpret_cast,C风格的转换或函数式转换
我究竟做错了什么?
我正在使用TR1正则表达式(对于VS2010),我正在尝试做的是为名为"name"的组搜索特定模式,为名为"value"的组搜索另一种模式.我认为我想要的是一个捕获组,但我不确定这是否是正确的术语.我想将匹配分配给模式"[^:\ r \n] +):\ s"到名为"name"的匹配列表,并匹配模式"[^\r \n] +)\ r \n \n)+"到名为"value"的匹配列表.
到目前为止我的正则表达式是
string pattern = "((?<name>[^:\r\n]+):\s(?<value>[^\r\n]+)\r\n)+";
Run Code Online (Sandbox Code Playgroud)
但是程序运行时正则表达式T4R1标头不断抛出异常.我的模式的语法有什么问题?有人可以展示一个能够做我想要完成的事情的示例模式吗?
另外,如何在模式中包含一个匹配的子字符串,但实际上不包含结果中的子字符串?例如,我想匹配模式的所有字符串
"http://[[:alpha:]]\r\n"
Run Code Online (Sandbox Code Playgroud)
,但我不想在返回的匹配结果中包含子字符串"http://".
不确定如何描述这个,但在这里我去:
出于某种原因,当试图创建我的游戏的发布版本进行测试时,它的敌人创建方面是行不通的.
Enemies *e_level1[3];
e_level1[0] = &Enemies(sdlLib, 500, 2, 3, 128, -250, 32, 32, 0, 1);
e_level1[1] = &Enemies(sdlLib, 500, 2, 3, 128, -325, 32, 32, 3, 1);
e_level1[2] = &Enemies(sdlLib, 500, 2, 3, 128, -550, 32, 32, 1, 1);
Run Code Online (Sandbox Code Playgroud)
多数民众赞成我如何创造我的敌人.在调试配置中工作正常,但是当我切换到发布配置时,似乎没有正确初始化敌人.
对我来说,这似乎有点奇怪,它在调试中工作,但不是在发布,任何帮助赞赏的主要是我做错了什么.
这个问题长期困扰着我.例如,代码
ifstream in;
char temp;
int a;
in.open ("Random.txt");
for (a = 0;a < 10000;a++)
in.read (&temp, 1);
in.close ();
Run Code Online (Sandbox Code Playgroud)
工作正常,直到ifstream遇到替换字符(ASCII = 26).然后,对于所有后续角色,ifstream::read给我temp = -1.我真的不希望这种情况发生,而是希望它继续从文件中读取字符而不是-1.我做错了什么?
我的程序中有一堆循环.我得到这些错误的行如下:
for (size_t i=0; i++;i<student.length())
Run Code Online (Sandbox Code Playgroud)
和
for (int i=0; i++; i<13)
Run Code Online (Sandbox Code Playgroud)
似乎无法弄清楚:/我在size_t类型的第一个循环中创建了迭代变量,因为.length函数返回size_t变量(或互联网说的那样).即使这是问题,我也看不出为什么我会在第二个循环上得到错误.
我希望有人可以帮助我,我正在尝试使用visual c ++ 2010在我的应用程序上创建一个int [400000000](4亿)数组但是它会产生溢出错误相同的代码在linux上运行g ++.我需要这个,因为我正在使用大型矩阵.先感谢您.
有谁知道如何在visual studio 2008中打开vcxproj.看来这个文件只是由visual studio 2010打开的不是吗?
我将C++代码从VS2008迁移到VS2010时遇到了问题.到目前为止,我无法找到解释原因,并感谢您的帮助.
我们有一个自定义内存分配器,它驻留在一个DLL中.在其余的代码中,我们使用预处理器将分配重定向到我们的函数.以下简单代码在VS2008中正确编译,但在VS2010中没有.
在stdafh.h中:
#define free my_free
#include <string>
Run Code Online (Sandbox Code Playgroud)
在VS2010中,我得到:
1>d:\program files\microsoft visual studio 10.0\vc\include\xdebug(62): error C3861: 'free': identifier not found
Run Code Online (Sandbox Code Playgroud)
来自这条线:
template<class _Ty>
void __CLRCALL_OR_CDECL _DebugHeapDelete(_Ty *_Ptr)
{ // delete from the debug CRT heap even if operator delete exists
if (_Ptr != 0)
{ // worth deleting
_Ptr->~_Ty();
// delete as _NORMAL_BLOCK, not _CRT_BLOCK, since we might have
// facets allocated by normal new.
free(_Ptr);
Run Code Online (Sandbox Code Playgroud)
任何帮助或想法将受到高度赞赏!
摩西
我正在尝试在资源文件 (.rc) 中包含一个头文件。路径是这样的"folder_a/sub_folder_b/file_name.h"
folder_a 所在的文件夹包含在项目的 c++ 包含目录中。
当我在同一个项目的 .cpp 文件中编写相同的 #include 指令时,它会正确编译,但对于 .rc 文件,VS 找不到头文件。
在源代码编辑器窗口中,当我右键单击 #include 指令并选择“打开文档”时,弹出错误指出它找不到文件,显示搜索文件的路径,但项目的包含路径不是显示。
如果我对 .cpp 文件中的虚拟 #include 执行相同的操作(同样是同一个项目),所有路径都会显示在错误消息中。
我的结论是 VC++ 不使用项目中定义的包含目录,用于 .rc 文件中的 #include 指令。
这是真的?如果没有 - 我做错了什么?如果是 - 有没有办法解决它?
我试图避免:
#include "../../../parent_folder/folder_a/sub_folder_b/file_name.h"
但如果需要,我会去做。