position.hh: 46: ошибка: ожидаемый неквалифицированный идентификатор перед «пространством имен» - PullRequest
3 голосов
/ 10 февраля 2010

Вот мой код:

 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     {    

Спасибо, Спидер, это здорово. Некролис, спасибо тебе тоже. Вы оба, ребята, находитесь на одной и той же дорожке в сборочных единицах. Вот полный отчет об ошибке:

В файле из файла location.hh: 45, из parser.h: 64, от scanner.h: 25, от scanner.ll: 8: position.hh: 46: ошибка: ожидаемый неквалифицированный идентификатор перед «пространством имен»

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:

Я также должен добавить, что эти файлы генерируются зубрами. когда я пытаюсь скомпилировать класс сканера c ++, сгенерированный flex ++, я дохожу до этого этапа. Я получаю код .cc с помощью команды flex --c ++ -o scanner.cc scanner.ll.

Ответы [ 2 ]

2 голосов
/ 10 февраля 2010

Ошибка может возникать в файле, отличном от файла, в котором она была зарегистрирована (из-за единиц компиляции), а именно в конце или в конце этого «другого» файла (например, отсутствующего «}» или «;»или "#endif" и т. д.)

2 голосов
/ 10 февраля 2010

это случается, когда; или не хватает какой-то другой закрывающей вещи перед пространством имен. Вы уверены, что строки до 34 не имеют кода? Если у них есть код (даже если этот код другой #include), то ошибка есть.

РЕДАКТИРОВАТЬ: или если все 34 строки не имеют кода, ошибка в файле, который включает этот заголовок, скорее всего, есть код без окончания; или} или) или другой конечный символ, и сразу после него (конечно, без комментариев) есть #include position.hh

Или, если в строке два включения, по одному перед position.hh, последние строки заголовка, включенные перед position.hh, имеют ошибку, обычно структуру без; после закрытия}

...