2017-10-06 12 views
1
#include "stdafx.h" 
#include "CppUnitTest.h" 
#include <iostream> 
#include <cstdlib> 


using namespace Microsoft::VisualStudio::CppUnitTestFramework; 

namespace UnitTest2 

{  
    TEST_CLASS(UnitTest1) 
    { 
    public: 

     int vector [6] = { 14, 10, 11, 19, 2, 25 }; 
     bool ArrayAreEqual; 
     int static compare(const void * x1, const void * x2) 
     { 
      return (*(int*)x1 - *(int*)x2); 
     } 

     TEST_METHOD(TestMethod1) 
     { 
      qsort(vector, 6, sizeof(int), compare); 
      for (int ix = 0; ix < 6; ix++) 
       std::cout << vector[ix] << " "; 
      // TODO: Your test code here 


      int TestVector[6] = { 2,10,11,14,19,25 }; 
      if (std::equal(std::begin(vector), std::end(vector), std::begin(TestVector))) 
      { 
       ArrayAreEqual = true; 
      } 

      else 
      { 
       ArrayAreEqual = false; 
      } 
      Assert::IsTrue(ArrayAreEqual); 

     } 

    }; 
} 

私のコードでは、int vector [6] = {14、10、11、19、2、25};要素数[6]で定義することができます(そうでなければ、不完全な型は許されません)。しかし、この変数がグローバルであれば、int vector [] = {14、10、11、19 、2,25}。 これはなぜ起こりますか?グローバル変数と内部クラスの違いは何ですか?

+1

この質問に別のタイトルをお勧めします。 –

+0

質問のすべてのコードです。最後のVS 2017.ちょうど置き換えられたintベクトル[6] = {14、10、11、19、2、25}; 〜int vector [] = {14,10,11,19,2,25}。非互換型を取得することはできません。 –

+0

これは、クラスメンバ変数の初期化がその定義とは非常に異なるステップなのでです。この初期化は、クラスのオブジェクト(インスタンス)が作成されるときに発生します(コンストラクタ内の隠された初期化子とみなされます)。初期化はコンストラクタによってオーバーライドすることもできます。 –

答えて

2

他のすべての初期化子とは異なり、クラス内(非静的)メンバー初期化子はoverridden by a constructor's member initializer listです。それらは無視される可能性があるので、配列の長さを指定するために使用することはできません。

関連する問題