Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ MacOS上的Clang编译错误_C++_Macos_Clang++ - Fatal编程技术网

C++ MacOS上的Clang编译错误

C++ MacOS上的Clang编译错误,c++,macos,clang++,C++,Macos,Clang++,这个问题似乎只出现在MacOS上,在linux上也可以使用clang进行编译 下面的代码是一个简化,但演示了这个问题 #include<iostream> int index = 0; int main() { std::cout << index << std::endl; } 当使用stdio删除iostream时,代码会按预期编译。他们是解决这个问题的方法,还是我必须重命名我的变量来避免这个问题 我发现了,但是我已经使用了C++ 11标志,而-

这个问题似乎只出现在MacOS上,在linux上也可以使用clang进行编译

下面的代码是一个简化,但演示了这个问题

#include<iostream>
int index = 0;
int main()
{
    std::cout << index << std::endl;
}
当使用stdio删除iostream时,代码会按预期编译。他们是解决这个问题的方法,还是我必须重命名我的变量来避免这个问题


<>我发现了,但是我已经使用了C++ 11标志,而-STD= C11标志似乎对C++代码无效。

< P>,你使用的CLAN/XCODE的特定版本在包含<代码> <代码>时,包含了<代码> <代码>标题。代码>在全局范围内提供一个名为
index()
的函数。因此,不能在全局范围内用相同的名称声明变量

重命名变量,或将其移动到
main()

因为
myVar
指的是局部变量,而
::myVar
指的是全局范围内的变量

他们是解决这个问题的方法,还是我必须重命名我的变量来避免这个问题

C++专门提供名称空间以避免名称之间的冲突。您可以为变量创建一个:

#include<iostream>

namespace MyGlobals {
    int index = 0;
}

int main()
{
    std::cout << MyGlobals::index << std::endl;
}
#包括
名称空间MyGlobals{
int指数=0;
}
int main()
{

std::cout为什么你希望它编译?你认为
索引是什么?一个粗心的键入索引应该是名称而不是类型。你显然是在重新键入代码-不要这样做-使用复制粘贴发布。代码和错误消息不匹配。请发布示例代码中的真实错误。它们的版本或Xcode/clang是这样的吗不包含字符串.h?从搜索结果中,我发现它似乎是Mac中的默认标题。我目前使用的是Apple LLVM版本9.0.0(clang-900.0.38)@ErikW不知道。在任何情况下,这都不是您可以控制的。因此,要么使用其他名称,将变量移动到另一个范围,要么使用Caleb在另一个答案中指出的名称空间。
clang++ -std=c++11 main.cpp -o test
#include <iostream>

int main()
{
    int index = 0;
    std::cout << index << std::endl;
}
#include <iostream>

int myVar = 0;

int main()
{
    int myVar = 1;
    std::cout << myVar << '\n';
    std::cout << ::myVar << '\n';
}
1
0
#include<iostream>

namespace MyGlobals {
    int index = 0;
}

int main()
{
    std::cout << MyGlobals::index << std::endl;
}