【发布时间】:2017-11-13 01:22:54
【问题描述】:
在 Visual Studio 2017 中创建 Linux 项目并在源代码中插入 using namespace std; 时,如下所示:
#include <iostream>
#include <string>
using namespace std;
int main()
{
size_t i = 1;
string s = to_string(i);
cout << i << s << endl;
return 0;
}
如果我按 F12 (Go to definition),它会为我提供两个定义位置:
来自stddef.h
(C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\Linux\include\usr\include\x86_64-linux-gnu\5\include\stddef.h):
// ...
namespace std
{
typedef __SIZE_TYPE__ size_t;
// ...
还有c++config.h
(C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\Linux\include\usr\include\x86_64-linux-gnu\c++\5\bits\c++config.h):
// ...
#if !(defined (__GNUG__) && defined (size_t))
typedef __SIZE_TYPE__ size_t;
// ...
它只发生在 VS 中的 Linux 项目中,而不是 Windows 项目。
是否有任何已知的解决方案(除了“不要使用using namespace std; :) )?
更新:将此问题报告给 Microsoft:https://developercommunity.visualstudio.com/content/problem/67405/ambiguous-symbol-size-t-in-linux-projects-when-usi.html
Upd2:微软表示他们已修复它,解决方案将在下一次更新中:https://developercommunity.visualstudio.com/content/problem/67405/ambiguous-symbol-size-t-in-linux-projects-when-usi.html
【问题讨论】:
-
@Rakete1111 请不要删除“visual-studio-2017”标签,这个问题只针对这个版本。
-
所以你的意思是,当你写
using namespace std时你只会得到丑陋的曲线?这将使它成为 VS 2017 的最佳新功能。 -
好吧,靠理智和利益的力量,删除 using namespace std;会给你带来两件事(没有波浪线并修复语句的所有其他问题),关闭智能感知会给你带来一件事(没有波浪线)。从我在 CS 大学学到的所有经济学中,我会说第一个更有利可图;)
-
Linux 头文件中的一个错误导致 itellisense 中出现波浪状的红线你知道 什么Linus 会回答这个问题吗?
-
@n.m.再次仔细阅读:VS 中用于 Linux 项目的标头中的错误。不管怎样,你知道 Linus 会怎么说 C++ 本身吗?