2014-02-06 89 views
0

我的新MacBook和Mac OS X Mavericks有點問題。 在我的Linux機器上,我的代碼編譯沒有問題,但在我的Mac上,我收到了一些神祕的錯誤消息,我不明白。g ++無法在Mac OS X上編譯小牛隊

例如是這樣的:

/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);} 
+0

複製並粘貼完整的錯誤日誌。這將告訴我們你從哪裏來的。 –

+0

是的...完整的日誌太大而無法發佈。我將編輯我的帖子並儘可能地放入。問題是我不能產生一個最小代碼,它會產生錯誤:( – Dominik

回答

2

define一上線71這與衝突使用在C++非標準庫throw關鍵字在nr3.h命名throw宏。

一個簡單的解決方案是將其他名稱命名爲宏,如MY_PROJECT_THROW

無論如何,這是一個很好的做法,將所有使用uniqe字符串定義的宏前綴以避免此類名稱衝突。

+0

哈哈!這解決了問題:)有趣的是,它在我的Linux機器和以前的Mac OS X版本上沒有問題。 – Dominik