API ユーザーが構造体名 CURL を使用し、API が内部的に CURL を Curl_easy として参照するように、CURL が CURL_easy として内部的に CURL 構造体を実装しているように見える方法を模倣しようとしています。
これは、
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 内でうまく解析されないものはありますか?