0

私は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内ではうまく解析されません。

+1

Visual Studio内でIntelliSenseで使用されるパーサーは、実際のコンパイラで使用されるパーサーとは異なります。したがって、2つが異なるケース(あなたのように)があります。 –

+0

私はあなたのファイルのコピーを作って、CygwinのGCCを使ってEclipseでビルドしましたが、問題なく動作しました。 何かを見逃しましたか?ソースコードは、記載されているものとは異なる方法で組織されていますかヘッダーファイルのコードの一部ですか? – user2304458

答えて

0

Some programmer dudea commentに答えを提供:

をVisual Studioの内部でのIntelliSenseが使用するパーサは実際のコンパイラで使用されるのと同じパーサではありません。したがって、2つが異なるケース(あなたのように)があります。

関連する問題