为什么VS2017警告“输入函数定义未找到”函数在输入typedef'd时声明的前向函数定义?
问题描述:
我试图模仿CURL如何将CURL结构内部实现为Curl_easy,以便API用户使用结构名称CURL,并将API内部引用CURL作为Curl_easy。为什么VS2017警告“输入函数定义未找到”函数在输入typedef'd时声明的前向函数定义?
这是通过在卷曲/ curl.h具有
typedef struct Curl_easy CURL
然后具有
CURL_EXTERN CURL *curl_easy_init(void);
和
struct Curl_easy *curl_easy_init(void)
在卷曲/ 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中解析不好的东西?
答
Some programmer dude在a comment提供了答案:
使用智能感知在Visual Studio中的解析器是不实际的编译器使用相同的解析器。所以有些情况(比如你的显然)在两者不同的地方。
Visual Studio中IntelliSense使用的解析器与实际编译器使用的解析器不同。所以有些情况(比如你的显然)在两者不同的地方。 –
我制作了一个文件的副本,并在Cygwin上使用GCC使用GCC构建它,并且没有任何问题。 你错过了什么吗?源代码的组织与上述不同吗?是头文件中的一些代码? – user2304458