【问题标题】:Visual Studio 2013 - C++ ErrorsVisual Studio 2013 - C++ 错误
【发布时间】:2014-12-01 14:55:11
【问题描述】:

发生了一些奇怪的事情。当我在 Dev-C++ 中编译我的程序时,它没有给我任何错误并且编译干净。当我把它放在 Visual Studio 中时,我遇到了很多错误:

Error   1   error C2371: 'MailRecipient' : redefinition; different basic types
Error   2   error C3861: 'GetModuleFileName': identifier not found  
Error   3   error C2664: 'HRESULT SHGetFolderPathW(HWND,int,HANDLE,DWORD,LPWSTR)' : cannot convert argument 5 from 'char [260]' to 'LPWSTR'
Error   4   error C3861: 'CopyFile': identifier not found
Error   5   error C2664: 'BOOL SetFileAttributesW(LPCWSTR,DWORD)' : cannot convert argument 1 from 'char [512]' to 'LPCWSTR'
Error   6   error C2664: 'HRESULT SHGetFolderPathW(HWND,int,HANDLE,DWORD,LPWSTR)' : cannot convert argument 5 from 'char [260]' to 'LPWSTR'
Error   7   error C2664: 'BOOL SetFileAttributesW(LPCWSTR,DWORD)' : cannot convert argument 1 from 'char []' to 'LPCWSTR'
Error   8   error C2664: 'LSTATUS RegOpenKeyExW(HKEY,LPCWSTR,DWORD,REGSAM,PHKEY)' : cannot convert argument 2 from 'const char [46]' to 'LPCWSTR'
Error   9   error C2664: 'HRESULT SHGetFolderPathW(HWND,int,HANDLE,DWORD,LPWSTR)' : cannot convert argument 5 from 'char [260]' to 'LPWSTR'
Error   10  error C2664: 'LSTATUS RegSetValueExW(HKEY,LPCWSTR,DWORD,DWORD,const BYTE *,DWORD)' : cannot convert argument 2 from 'const char [9]' to 'LPCWSTR'

这一切都适用于 Dev-C++。我需要在 VS 中编译它,因为我想从 POCO 库中添加一些东西,具有讽刺意味的是,它不能在 Dev-C++ 中编译......有什么帮助吗?

【问题讨论】:

  • 没有看到导致这些错误的代码,真的无法分辨。但至少听起来你的字符类型和代码的编译方式有问题(Unicode 与多字节等)
  • @crashmstr 我不熟悉编译器知识,所以...知道如何绕过这些错误而不实际更改代码吗?
  • @user3478487 坦率地说,这是一个愚蠢的想法。编译器错误意味着代码无效,为什么要绕过它?
  • 与其从 VS 开始,不如先尝试让 POCO 工作?可能更容易。它适用于 GCC/MinGW(可能是你以前的编译器,但不是 DevCPP)
  • @close-voters:请不要投票关闭您不知道如何回答的问题,即出于无知。

标签: c++ visual-studio visual-studio-2013 compiler-errors poco


【解决方案1】:

Visual Studio 项目默认定义 UNICODE

您可以在项目设置中关闭 Unicode,或者重新设计您的程序以使用基于 wchar_t 的字符串(例如,L"Blah" 而不是 "Blah")。

或者,您可以#undef UNICODE 之前包括<windows.h>,每个地方。

【讨论】:

  • 我做到了,它消除了 3 个错误。还剩 7 个 :(
【解决方案2】:

您的项目中的#include 语句似乎存在一些问题。您需要弄清楚 MailRecipient 被重新定义的原因。您可能需要在 Visual Studio 中调整一些项目设置。
另外,正如第一个答案所暗示的那样,Visual Studio 默认使用 UNICODE,这会导致它调用 Windows API 函数的宽字符串版本。您可以使用 std::widen 函数为 Windows API 调用转换字符串。有关此主题的更多信息,请参阅utf8everywhere.org

【讨论】:

  • 我重新排列了我的#includes 并添加了 POCO 的。我只收到 CopyFile 和 GetModuleFileName 的 2 个错误:未找到标识符。有什么想法吗?
  • 添加了 并且它有效。没关系 :) 谢谢大家的帮助!
猜你喜欢
  • 1970-01-01
  • 2014-06-18
  • 1970-01-01
  • 1970-01-01
  • 2014-04-13
  • 2017-04-28
  • 2016-07-09
  • 2014-01-09
  • 1970-01-01
相关资源
最近更新 更多