C ++错误:'inline'只能出现在函数上

时间:2012-08-15 13:12:35

标签: c++ clang libc++

我正在尝试使用clang ++在OS X 10.7下编译VCMI

我使用CXX=clang++配置项目,因为Apple的gcc似乎无法识别所需的-std=c++0x标记。

我已将-stdlib=libc++添加到CXXFLAGS,因为如果没有该句子甚至找不到#include <array>

目前我已经:CXXFLAGS= -std=c++0x -stdlib=libc++ -Wall -Wextra -Wcast-align -Wpointer-arith -Wno-switch -Wno-sign-compare -Wno-unused-parameter -Wc++11-extensions

问题是我遇到以下错误:

clang: warning: treating 'c-header' input as 'c++-header' when in C++ mode, this behavior    is deprecated
clang: warning: argument unused during compilation: '-ggdb'
StdInc.h:1:9: warning: #pragma once in main file
#pragma once
        ^
In file included from StdInc.h:3:
In file included from ./../Global.h:32:
In file included from /usr/bin/../lib/c++/v1/algorithm:594:
In file included from /usr/bin/../lib/c++/v1/memory:596:
/usr/bin/../lib/c++/v1/iterator:1696:1: error: 'inline' can only appear on functions
inline _LIBCPP_INLINE_VISIBILITY
^
/usr/bin/../lib/c++/v1/iterator:1698:1: error: variable 'begin' declared as a template
begin(_T (&__array)[_N])
^
/usr/bin/../lib/c++/v1/iterator:1698:12: error: use of undeclared identifier '__array'
begin(_T (&__array)[_N])
           ^
./../tchar_amigaos4.h:157:16: note: expanded from macro '_T'
#define _T(x)           x
                        ^
In file included from StdInc.h:3:
In file included from ./../Global.h:32:
In file included from /usr/bin/../lib/c++/v1/algorithm:594:
In file included from /usr/bin/../lib/c++/v1/memory:596:
/usr/bin/../lib/c++/v1/iterator:1698:25: error: expected ';' at end of declaration
begin(_T (&__array)[_N])
                        ^
                        ;
/usr/bin/../lib/c++/v1/iterator:1699:1: error: expected unqualified-id
{
^
1 warning and 5 errors generated.

我必须承认,我从未见过这样的事情。这些是在libc ++源代码中! 有人知道可能是什么原因吗?

1 个答案:

答案 0 :(得分:5)

您的问题在这里:

./../tchar_amigaos4.h:157:16: note: expanded from macro '_T'
#define _T(x)           x

严格来说,在代码中定义一个名为_T的宏,然后包括标准头,是未定义的行为。

IIRC,更新版本的libc ++特别避免使用名称_T,因为人们倾向于搞砸了,所以你可能想尝试升级到最新版本的命令行工具。