0
我試圖模仿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中解析不好的東西?
Visual Studio中IntelliSense使用的解析器與實際編譯器使用的解析器不同。所以有些情況(比如你的顯然)在兩者不同的地方。 –
我製作了一個文件的副本,並在Cygwin上使用GCC使用GCC構建它,並且沒有任何問題。 你錯過了什麼嗎?源代碼的組織與上述不同嗎?是頭文件中的一些代碼? – user2304458