#include <iostream>std::tuple<int,int> foo() { return std::make_tuple(1,1);}int main() { auto pair = foo(); int x = std::get<0>(pair); int y = std::get<1>(pair); std::cout << x << "," << y << std::endl; return 0;}
我也有一个CMakeLists.txt:
cmake_minimum_required(VERSION 2.8)project(foo)set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -Wall -Werror -Werror=sign-compare")set(SOURCE_fileS main.cpp)add_executable(foo ${SOURCE_fileS})
在我的笔记本电脑上,Clang愉快地编译了这段代码并打印出1,1.没有错误,没有警告,没有.在提交框中,我没那么幸运.
/home/nate/foo/main.cpp: In function 'std::tuple<int,int> foo()':/home/nate/foo/main.cpp:3:26: error: return type 'class std::tuple<int,int>' is incomplete std::tuple<int,int> foo() { ^/home/nate/foo/main.cpp:4:12: error: 'make_tuple' is not a member of 'std' return std::make_tuple(1,1); ^/home/nate/foo/main.cpp: In function 'int main()':/home/nate/foo/main.cpp:8:21: error: 'voID pair' has incomplete type auto pair = foo(); ^/home/nate/foo/main.cpp:9:13: error: 'get' is not a member of 'std' int x = std::get<0>(pair); ^/home/nate/foo/main.cpp:10:13: error: 'get' is not a member of 'std' int y = std::get<1>(pair); ^
这些错误是有道理的,因为我没有包含元组头,但我不明白为什么这个代码在我的笔记本电脑上完全编译.这里发生了什么?
解决方法 不同的编译器有不同的头文件. C头文件与您正在使用的编译器密切相关.你可能拥有的是Clang的< iostream>本身#include元组头文件,无论出于何种原因;因此,引用std :: tuple的代码只会通过#includeing< iostream>来快乐编译.头.
当然,这将依赖于编译器的特定行为.
不同的编译器有不同的头文件. C标准不禁止一个头文件自动包含另一个头文件;但是为了使用特定的类,模板或其他资源,确保代码可以引用此类,模板或其他资源的唯一方法是明确包含其头文件.
总结以上是内存溢出为你收集整理的为什么这个C代码与一些编译器编译而不是其他编译器?全部内容,希望文章能够帮你解决为什么这个C代码与一些编译器编译而不是其他编译器?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)