g ++无法在Mac OS X Mavericks上编译

时间:2014-02-06 17:15:38

标签: c++ macos g++ osx-mavericks

我的新款MacBook和Mac OS X Mavericks出现了一些问题。 在我的Linux机器上,我的代码编译没有问题,但在我的Mac上,我收到了我不明白的神秘错误消息。

例如:

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/list:240:62: error: 
  invalid use of non-static data member '__ptr_'
explicit __list_iterator(__node_pointer __p) _NOEXCEPT : __ptr_(__p) {}

有人可以帮帮我吗?我真的不知道该怎么做......

编辑: 所以...这里有更多来自错误日志。这是第一部分。完整的日志太长了......

g++ SpinDerivatorController.cpp functions.cpp globalVariables.cpp main.cpp mathFunctions.cpp svd.cpp -o testCompile
In file included from SpinDerivatorController.cpp:8:
In file included from ./SpinDerivatorController.h:11:
In file included from ./SpinOperators.h:11:
In file included from ./SpinStateTemplate.h:11:
In file included from ./StateTemplateSimple.h:19:
./SeriesTemplate.h:217:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^
 ./SeriesTemplate.h:314:4: note: in instantiation of member function      'SeriesTemplate<std::__1::complex<double>,
  ExponentsTemplate<int> >::operator*=' requested here
    s3*=s2;
      ^
./StateTemplateSimple.h:444:25: note: in instantiation of function template specialization
  'operator*<std::__1::complex<double>, ExponentsTemplate<int> >' requested here
                                    x += (it1->second) * (it2->second);
                                                       ^
 SpinDerivatorController.cpp:127:24: note: in instantiation of function template specialization
  'operator*<SeriesTemplate<std::__1::complex<double>, ExponentsTemplate<int> > >' requested here
                    b[k]=(inputStates[j]*outputStates[i]).real();
                                        ^
1 warning generated.
In file included from functions.cpp:8:
In file included from ./functions.h:15:
In file included from ./StateTemplateSimple.h:12:
 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/list:240:62: error: 
  invalid use of non-static data member '__ptr_'
explicit __list_iterator(__node_pointer __p) _NOEXCEPT : __ptr_(__p) {}
                                                         ^~~~~~
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/list:240:69: error: 
  use of undeclared identifier '__p'
explicit __list_iterator(__node_pointer __p) _NOEXCEPT : __ptr_(__p) {}
                                                                ^
 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/list:240:60: error: 
  C++ requires a type specifier for all declarations
explicit __list_iterator(__node_pointer __p) _NOEXCEPT : __ptr_(__p) {}
                                                       ^
 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/list:245:21: error: 
  expected member name or ';' after declaration specifiers
template<class, class> friend class list;
                ^
 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/list:245:21: error: 
  C++ requires a type specifier for all declarations
template<class, class> friend class list;
                ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/list:245:20: error: 
  expected ';' at end of declaration list
template<class, class> friend class list;
               ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/list:263:5: error: 
  expected member name or ';' after declaration specifiers
{
^
 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/list:240:50: error: 
  expected expression
explicit __list_iterator(__node_pointer __p) _NOEXCEPT : __ptr_(__p) {}
                                             ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/__config:289:21: note: 
  expanded from macro '_NOEXCEPT'
#  define _NOEXCEPT throw()
                ^
./nr3.h:71:59: note: expanded from macro 'throw'
 {printf("ERROR: %s\n     in file %s at line %d\n", message,__FILE__,__LINE__); throw(1);}

1 个答案:

答案 0 :(得分:2)

您在第71行definethrow了一个名为nr3.h的宏。这与在c ++标准库中使用throw关键字相冲突。

一个简单的解决方案是将宏命名为其他内容,例如MY_PROJECT_THROW

无论如何,最好使用uniqe字符串为您定义的所有宏添加前缀,以防止此类名称冲突。