Почему VS2017 предупреждает «Определение функции не найдено»? для функций forward, объявленных с вводом typedef’d, но определенных с помощью original?

Я пытаюсь подражать тому, как CURL реализует внутреннюю структуру CURL как Curl_easy, так что пользователи API используют имя структуры CURL, а API внутренне ссылается на CURL как Curl_easy.

Это делается с помощью

typedef struct Curl_easy CURL

в curl / curl.h, а затем, имея

CURL_EXTERN CURL *curl_easy_init(void);

а также

struct Curl_easy *curl_easy_init(void)

в curl / easy.h и easy.c соответственно.

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

typedef struct IntStruct IS;

IS* initializeIS();
void countUpIS( IS* is );

struct IntStruct
{
int i;
};

IntStruct* initializeIS()
{
IntStruct* is = new IntStruct;
is->i = 0;
return is;
}

void countUpIS( IntStruct* is )
{
is->i++;
}

#include <iostream>
using namespace std;

int main( int argc, char* argv[] )
{
IS* is = initializeIS();
countUpIS( is );
cout << is->i << endl;

return 0;
}

В результате пользователи этих функций initializeIS () и countUpIS () используют имя структуры «IS», но разработчики этих функций называют его «IntStruct».

Этот код компилируется и работает нормально, но VS2017, кажется, подчеркивает countUpIS зеленым цветом как «Определение функции для countUpIs не найдено».

Любое понимание, почему это так? Что-то совершенно законно, но не очень хорошо проанализировано в рамках VS2017?

0

Решение

Какой-то программист чувак предоставил ответ в комментарий:

Парсер, используемый IntelliSense внутри Visual Studio, — это не тот парсер, который используется фактическим компилятором. Поэтому есть случаи (как, по-видимому, ваш), где они различаются.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]