Как я могу удалить предупреждение VS C4091: 'typedef': игнорируется слева от 'SPREADSHEET', когда переменная не объявлена - PullRequest
11 голосов
/ 27 мая 2009

Это предупреждение несколько раз вызывается в моем коде одним и тем же объявлением, которое гласит:

// Spreadsheet structure
typedef struct SPREADSHEET
{    
      int ID;               // ID of the spreadsheet    
      UINT nLines;          // Number of lines

      void CopyFrom(const SPREADSHEET* src)
      {
           ID = src->ID;
           nLines = src->nLines;
      }
};

Я не хочу просто отключить это предупреждение,

а лучше изменить код, чтобы предупреждение не появлялось!

ПРИМЕЧАНИЕ: я не хочу объявлять здесь какие-либо переменные (это заголовочный файл), только определить, что должна включать структура SPREADSHEET ...

Ответы [ 5 ]

26 голосов
/ 27 мая 2009

Удалить typedef. Это способ объявления структур в C, C ++ делает это автоматически для вас.

6 голосов
/ 27 мая 2009

Вам нужно добавить какой-нибудь идентификатор перед завершающей ;, например ::10000 *

typedef struct BLAH { ... } BLAH;
4 голосов
/ 27 мая 2009

Просто удалите "typedef". Вы объявляете новую структуру, и ключевое слово typedef для этого не используется. Вы должны использовать typedef, чтобы определить новое имя для существующего типа, например:

typedef int number;
1 голос
/ 09 февраля 2011

Да, BLAH после закрывающей скобки важно, чтобы сделать typedef действительной. Вы можете удалить SPREADSHEET из текущего места и оставить его между } и ;.

0 голосов
/ 11 августа 2015

Моя интерпретация этого предупреждения заключается в том, что компилятор указывает, что ключевое слово typedef не нужно, поскольку переменная не объявляется. и поэтому, если целью кода является просто объявить struct, typedef является излишним.

...