2012-02-07 64 views
0

我想初始化向量包含13個元素每個在類的構造函數。初始化向量包含13個元素

由於在下列情況下編譯器給出了「語法錯誤:'常量'」。

#include <vector> 
using namespace System; 
public ref class MyClass { 
public : 
     vector<int> vector1D(13) ;  // Syntax error : 'constant' 
     vector<vector<int>> vector2D(13,vector<int>(13)) ; 

};

那麼如何將矢量初始化爲在構造函數中包含13個元素?

回答

0

你需要做的是在構造函數中:

class MyClass { 
public : 
    vector<int> vector1D; 
    vector< vector<int> > vector2D; 

    MyClass() 
    { 
     vector1D = vector<int>(13); 
     vector2D = vector< vector<int> > (13, vector<int>(13)); 
    } 
}; 
0

您不能在構造函數中13個元素預留空間。爲此,使用vector::reserve

+0

不過,您可以初始化它以在構造函數中包含13個元素。 – 2012-02-07 09:56:55

+0

感謝您的澄清。是的,如果你在施工時知道這13個要素是什麼。我在OP的代碼中沒有看到。 – 2012-02-07 10:02:58

+0

OP的代碼試圖用13個初始值初始化它,使用完全相同的構造函數。唯一的問題是它需要在構造函數定義中完成,而不是成員聲明。 – 2012-02-07 10:09:35

1

非靜態成員在構造函數中定義被初始化,而不是成員聲明:

class MyClass { 
public : 
     vector<int> vector1D; 
     vector<vector<int>> vector2D; 

     MyClass() : 
      vector1D(13), 
      vector2D(13,vector<int>(13)) 
     {} 
}; 
+0

在這種情況下,它可能不是合適的語法。編譯器提供了一個新的錯誤:MyClass:不支持混合類型 – eliz 2012-02-07 10:06:06

+0

@eliz:我猜這與Managed C++有關,我對此一無所知。這是你如何在標準C++中初始化它們的方法;根據Dialecticus的回答,你可能需要使用一些奇怪的非標準數組類型而不是'vector'。 – 2012-02-07 10:14:58

+0

無論如何,我會改變類不使用數組 – eliz 2012-02-07 10:23:59

0

如果MyClass是管理類,那麼它不能有託管成員。

#using <mscorlib.dll> 
#include <vector> 

using namespace System; 

public ref class MyClass { 
public : 
    cli::array<int>^ vector1D; 
    cli::array<cli::array<int>^>^ vector2D; 
    MyClass() 
    { 
     Array::Resize(vector1D, 13); 
     Array::Resize(vector2D, 13); 

     for each (cli::array<int>^ item in vector2D) 
      Array::Resize(item, 13); 
    } 
}; 
+0

陣列是確定的,但它必須是向量在這裏 – eliz 2012-02-07 10:17:38

+0

然後'MyClass'不能'ref'。 – Dialecticus 2012-02-07 11:05:46