Как я могу удалить предупреждение VS C4091: «typedef»: игнорируется слева от «SPREADSHEET», когда переменная не объявлена

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

// 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"...


person Wartin    schedule 26.05.2009    source источник


Ответы (5)


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

person Blindy    schedule 26.05.2009
comment
d= (◕‿↼ ) В нашем случае у нас не было typedef в начале (MSVC 2010), но добавление одного с идентификатором перед завершающим ; сделало свое дело (например, MY_EXPORT_MACRO typedef struct MY_TYPE { ... } MY_TYPE;). - person Top-Master; 11.03.2021

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

typedef struct BLAH { ... } BLAH;
person MSN    schedule 26.05.2009

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

typedef int number;
person sth    schedule 27.05.2009

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

person Srikant    schedule 09.02.2011
comment
Это следует оставить в качестве комментария. Заработайте необходимую репутацию, задав вопрос и ответив на него, а также просмотрите часто задаваемые вопросы. - person Serge Belov; 30.11.2012

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

person Neoheurist    schedule 11.08.2015