【发布时间】:2017-05-08 00:21:33
【问题描述】:
我想使用 Emscripten 编译 C++ 代码,其中我使用了一些 C++11 功能。不幸的是,我收到一个错误:
index.cpp:13:18: error: expected expression
vv.push_back({1.5f, 2.f});
^
index.cpp:14:18: error: expected expression
vv.push_back({5.f, 0});
^
index.cpp:15:18: error: expected expression
vv.push_back({1, 1});
^
index.cpp:17:9: warning: 'auto' type specifier is a C++11 extension [-Wc++11-extensions]
for(auto& item : vv) {
^
index.cpp:17:20: warning: range-based for loop is a C++11 extension [-Wc++11-extensions]
for(auto& item : vv) {
我不明白,为什么会出现这个错误。使用 emsdk 激活最新的 Emscripten 和 Clang 版本。
代码是:
#include<iostream>
#include<vector>
struct AA {
float a;
float b;
};
int main() {
std::vector<AA> vv;
vv.push_back({1.5f, 2.f});
vv.push_back({5.f, 0});
vv.push_back({1, 1});
for(auto& item : vv) {
std::cout << item.a << ' ' << item.b << std::endl;
}
}
我什至收到一条消息:LLVM version appears incorrect (seeing "4.0", expected "3.7")
如果是真的,它应该是可行的,因为“Clang 3.3 及更高版本实现了所有 ISO C++ 2011 标准。”
【问题讨论】:
-
您使用的是
-std=c++11编译器标志吗?不,如果我理解正确(“警告:'auto' 类型说明符是 C++11 扩展”) -
我得到这些错误,即使我添加
-Wc++11-extensions -
max66 告诉你
-std=c++11。你为什么对其他一些不相关的开关做出回应?是什么思考过程导致了这个决定? -
因为它在编译器日志中。感谢您的帮助。这对我来说是新的,即使在最新的 clang 中我也必须显式启用 C++11 功能
标签: c++ c++11 clang emscripten