分享方式:


編譯器警告 (層級 4) C4256

'function' :具有虛擬基底之類別的建構函式具有 '...';呼叫可能與舊版 Visual C++ 不相容

可能不相容。

請考慮下列程式碼範例。 如果建構函式 S2::S2(int i, ... ) 的定義是在版本 7 之前使用 Microsoft C++ 編譯器的版本進行編譯,但下列範例是使用目前的版本編譯,S3 的建構函式呼叫將無法正確運作,因為發生特殊案例的呼叫慣例變更。 如果兩個都是以 Visual C++ 6.0 編譯的,呼叫也不會正常運作,除非沒有傳遞省略符號參數。

若要修正此警告,

  1. 請勿在建構函式中使用省略號。

  2. 請確定其專案中的所有元件都是使用目前版本建置的(包括任何可定義或參考此類別的程式庫),然後使用 warning pragma 停用警告

下列範例會產生 C4256:

// C4256.cpp
// compile with: /W4
// #pragma warning(disable : 4256)
struct S1
{
};

struct S2: virtual public S1
{
   S2( int i, ... )    // C4256
   {
      i = 0;
   }
   /*
   // try the following line instead
   S2( int i)
   {
      i = 0;
   }
   */
};

void func1()
{
   S2 S3( 2, 1, 2 );   // C4256
   // try the following line instead
   // S2 S3( 2 );
}

int main()
{
}