(C ++ и gcc) ошибка: ожидаемый конструктор, деструктор или преобразование типа перед «встроенным» - PullRequest
1 голос
/ 04 августа 2009

У меня есть файл заголовка с некоторыми встроенными методами шаблона. Я добавил к нему объявление класса (просто пара статических методов ... это больше пространство имен, чем класс), и я начал получать эту ошибку компиляции в файле, который использует этот новый класс.

Есть несколько других файлов, включающих тот же файл .h, которые все еще компилируются без жалоб.

Поиск в поиске ошибки дает мне несколько ссылок на списки рассылки об ошибках в проектах с похожим сообщением об ошибке (единственное отличие, по-видимому, в том, что должно предшествовать преобразователю, деструктору или преобразованию типа).

Я готов начать отбрасывать все остальное, пока у меня не будет минимальной пробы, чтобы я мог разумно задать вопрос, но решил, что сначала сделаю глупый вопрос:

Может ли кто-нибудь дать мне базовую подсказку о том, что на самом деле означает это сообщение об ошибке означает , чтобы я мог начать отслеживать его / google его?

Просто ради полноты, первый пример того, где я вижу это, выглядит более или менее как

namespace Utilities
{
   template <typename T> GLfloat inline NormalizeHorizontally(T x)
   {
      GLfloat scaledUp = x*2.0;
      GLfloat result = scaledUp / Global::Geometry::ExpectedResolutionX;
      return result;
   }
}

1 Ответ

8 голосов
/ 04 августа 2009

Это означает, что вы поместили ключевое слово "inline" в неправильном месте. Это должно идти до типа возврата метода, например

 template <typename T> inline GLfloat  NormalizeHorizontally(T x)

Просто так.

Причина, по которой вы получили это сообщение на одном модуле компиляции, а не на других, может быть в том, что это шаблонная функция, которая не создавалась из этих других модулей компиляции.

Как правило, если вы получаете сообщение об ошибке «ожидается бла-бла до foobar», это ошибка синтаксического анализа, и она часто указывает на простую синтаксическую ошибку, такую ​​как отсутствие точки с запятой, отсутствие скобки или неверно заданные ключевые слова. Проблема обычно где-то рядом с упомянутой частью, но на самом деле может быть некоторое время назад, поэтому иногда вам приходится искать ее.

...