1

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

4

1 回答 1

2

一些程序员老兄在评论中提供了答案:

Visual Studio 中 IntelliSense 使用的解析器与实际编译器使用的解析器不同。因此,在某些情况下(显然像您的情况)两者不同。

于 2017-10-29T09:39:17.940 回答