std :: vector ctor在类之外编译,但不在里面?

时间:2013-10-30 15:13:11

标签: c++ class vector constructor

为什么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

为什么呢? :(

3 个答案:

答案 0 :(得分:7)

执行此操作的正确方法是:

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

答案 1 :(得分:4)

你想要的是:

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

这将控制构造vec_对象时C的构造方式。

答案 2 :(得分:2)

因为这不是C ++中的有效语法。正确的方法是:

#include <vector>

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

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

还有其他方法可以做到这一点,但这是最广泛使用和可访问的方法。