私はCURLがCURL構造体を内部的にCurl_easyとして実装する方法を模倣しようとしています。そのため、APIユーザーはstruct name CURLを使用し、APIは内部的にCURLをCurl_easyとして参照します。入力typedefで宣言されているが、元の関数で宣言されている関数に対して、VS2017が "関数定義が見つかりません"と警告するのはなぜですか?
これはカール/ curl.hで
typedef struct Curl_easy CURL
を有する、次いでカール/ easy.hとeasy.cで
CURL_EXTERN CURL *curl_easy_init(void);
と
struct Curl_easy *curl_easy_init(void)
を有することによって行われますそれぞれ、
だから私はそのアイデアをコピーして、同じことを行う必要があります小さな例作ら:
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で使用されるパーサーは、実際のコンパイラで使用されるパーサーとは異なります。したがって、2つが異なるケース(あなたのように)があります。 –
私はあなたのファイルのコピーを作って、CygwinのGCCを使ってEclipseでビルドしましたが、問題なく動作しました。 何かを見逃しましたか?ソースコードは、記載されているものとは異なる方法で組織されていますかヘッダーファイルのコードの一部ですか? – user2304458