我试图模仿 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 中没有很好解析的东西?