當您嘗試將數據成員定義為 dllimport 函式時,編譯程式 C2491 錯誤

本文可協助您解決當您嘗試將數據成員定義為 dllimport 函式時所發生的編譯程式 C2491 錯誤。

原始產品版本: Visual C++
原始 KB 編號: 815647

徵兆

您無法套用 __declspec(dllimport) 關鍵詞來實作函式。 例如,當您嘗試將數據成員定義 (包括靜態數據成員和函式) 為 dllimport 函式時,您會收到下列編譯程式 C2491 錯誤訊息:

'identifier': 不允許定義 dllimport 函式

原因和解決方式

您只能將 關鍵詞套 __declspec(dllimport) 用至宣告。 您無法套用 __declspec(dllimport) 關鍵詞來實作函式。 這個關鍵詞的目的是要透過 DLL 宣告函式的實作。 同樣地,如果您將 關鍵詞套 __declspec(dllimport) 用至數據成員,則會從 DLL 接收初始數據。 因此,您一開始無法在程序代碼中指派值。

當您嘗試編譯下列程式代碼時,會收到編譯程式 C2491 錯誤:

// function definition
void __declspec(dllimport) funcB() 
{
    // error C2491: 'funcB' : definition of dllimport function not allowed
}

發生此行為的原因是您將函式實作定義為 dllimport。 若要避免此編譯程序錯誤,請勿定義函式,而是改為宣告函式,如下所示:

// function declaration
void __declspec(dllimport) funcB(); // ok
int main()
{
}

同樣地,當您嘗試編譯下列程式代碼時,會收到編譯程式 C2491 錯誤:

//defining data member
extern __declspec(dllimport) int code = 1;
// error C2491: 'code' : definition of dllimport data not allowed

您會收到此錯誤訊息,因為您已將資料成員定義為 dllimport。 若要避免此編譯程序錯誤,請勿定義數據成員,而是改為宣告數據成員,如下所示:

// declaring data member
extern __declspec(dllimport) int code; // ok