0

explicit vector (size_type n)フォームがクラスの外では機能するのに、クラス内では機能しないのはなぜですか? これはコンパイルされます:

#include <vector>

int main() {
    std::vector<int> vec_(3); // set capacity to 3
    return 0;
}

しかし、これではありません:

#include <vector>

class C {
public:
    std::vector<int> vec_(3); // set capacity to 3
};

int main() {
    return 0;
}

g++ --std=c++0x -Wall -Wextra  -g a.cpp
a.cpp:5:27: error: expected identifier before numeric constant
a.cpp:5:27: error: expected ‘,’ or ‘...’ before numeric constant

なんで?:(

4

3 に答える 3

7

これを行う正しい方法は次のとおりです。

class C {
public:
    C() : vec_(3) {} // set capacity to 3 in constructor initialization list
    std::vector<int> vec_;
};
于 2013-10-30T15:17:18.223 に答える
4

あなたが望むものは:

class C {
public:
    std::vector<int> vec_;
    C() : vec_(3) { }
};

これは、オブジェクトvec_を構築するときにどのように構築されるかを制御しCます。

于 2013-10-30T15:17:19.317 に答える
2

これは C++ では有効な構文ではないためです。正しい方法は次のとおりです。

#include <vector>

class C {
public:
    std::vector<int> vec_;

public:
    // You add a constructor and initialize member data there:
    C () : vec_(3) {}
};

他にも方法はありますが、これが最も広く使用され、アクセスしやすい方法です。

于 2013-10-30T15:17:28.050 に答える