2011-10-15 20 views
0

在此代碼:預計嵌套名指定中 - GCC

Int.h:

#include <type_traits> 


#include "Best_Fit.h" 
template<class Int_T, typename Best_Fit<Int_T>::type Min_Range,typename Best_Fit<Int_T>::type Max_Range> 
class Int_Core 
{//If I move this class to a separate header I'm getting aforementioned error 

}; 

template<class Int_T, typename Best_Fit<Int_T>::type Min_Range, typename Best_Fit<Int_T>::type Max_Range> 
class Int : private Int_Core<Int_T,Min_Range,Max_Range> 
{ 

}; 

Best_Fit.h:

struct Signed_Type 
{ 
    typedef long long type; 
}; 

struct Unsigned_Type 
{ 
    typedef unsigned long long type; 
}; 

template<bool Cond, class First, class Second> 
struct if_ 
{ 
    typedef typename First::type type; 
}; 

template<class First, class Second> 
struct if_<false,First,Second> 
{ 
    typedef typename Second::type type; 
}; 

template<class Int_T> 
struct Best_Fit 
{ 
    typedef typename if_<std::is_signed<Int_T>::value,Signed_Type,Unsigned_Type>::type type; 
}; 

main.cpp中:

#include <iostream> 

using namespace std; 

#include "Int.h" 

int main(int argc, char* argv[]) 
{ 
    return 0; 
} 

錯誤:

error: expected nested-name-specifier before 'Best_Fit'| 

我正在用gcc編譯它4.6.1
不能將Int_Core放在單獨頭文件中的任何原因?

+0

最有可能你有包含文件中的問題。或其中包含的文件之一。仔細觀察一下,如果它不起作用,輸出處理器。 – rerun

回答

0

這可能不會在所有幫助,但我使用以下版本的編譯這一優良G ++:

g++ --version 
g++ (Ubuntu 4.4.3-4ubuntu5) 4.4.3 
Copyright (C) 2009 Free Software Foundation, Inc. 
This is free software; see the source for copying conditions. There is NO 
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 

用下面的命令:

g++ main.cpp -std=c++0x -o main 

沒有-std = C++ 0x我得到錯誤「預期的嵌套名稱說明符」