position.hh:46:错误:'namespace'之前的预期unqualified-id

时间:2010-02-10 03:54:03

标签: c++ bison yacc flex-lexer

这是我的代码:

 34  
 35 /**  
 36  ** \file position.hh  
 37  ** Define the example::position class.  
 38  */  
 39   
 40 #ifndef BISON_POSITION_HH   
 41 #define BISON_POSITION_HH   
 42    
 43 #include <iostream>   
 44 #include <string>   
 45    
 46 namespace example   
 47 {   
 48   /// Abstract a position.   
 49   class position   
 50   {   
 51   public:   
 52    
 53     /// Construct a position.   
 54     position ()    
 55       : filename (0), line (1), column (0)   
 56     {    

谢谢,斯派德,这很棒。 Necrolis,谢谢你。你们两个都在编译单元的同一轨道上。这是完整的错误报告:

来自location.hh的文件:45,                  来自parser.h:64,                  来自scanner.h:25,                  来自scanner.ll:8: position.hh:46:错误:在'namespace'之前预期的unqualified-id

location.hh看起来像这样:

35 /**
36  ** \file location.hh
37  ** Define the example::location class.
38  */
39 
40 #ifndef BISON_LOCATION_HH
41 # define BISON_LOCATION_HH
42 
43 # include <iostream>
44 # include <string>
45 # include "position.hh"
46 
47 namespace example
48 {
49 
50   /// Abstract a location.
51   class location
52   {
53   public:

我还要补充一点,这些文件是由野牛生成的。当我尝试编译由flex ++生成的c ++扫描器类时,我就到了这个阶段。我通过发布flex -c ++ -o scanner.c扫描器来获取.cc代码。

2 个答案:

答案 0 :(得分:2)

这发生在一个;或者在命名空间之前缺少其他一些结束的东西。你确定34之前的行没有代码吗?如果他们有代码(即使该代码是其他#include),那么错误就在那里。

编辑:或者如果所有34行都没有代码,则错误发生在包含此标题的文件上,很可能是没有结尾的代码;或}或)或其他一些结尾字符,紧接着它(忽略评论,当然)有#include position.hh

或者如果连续有两个包含,一个在position.hh之前,则包含在position.hh之前的标题的最后几行是错误的,通常是没有a的结构;关闭之后}

答案 1 :(得分:2)

错误可能发生在报告的文件以外的文件中(由于编译单元),即在“其他”文件的末尾或附近(例如缺少'}'或';'或'#endif'等)