在类中使用向量

时间:2013-12-06 20:34:54

标签: c++ vector stl

我对c ++比较陌生。今天我正在尝试使用标准库提供的类和向量容器。

如果我编译并运行这段代码,一切正常:

class foo{
// the class content here
};

int main() {
vector <int> v;
v.push_back(4); // simply adds an integer to the vector, it works fine.
return(0);
}

但是,如果我将向量定义放在类中并尝试简单地在类中向向量添加一个整数,我会收到以下错误: 未知的类型名称'p' 预期会员名称或';'在声明说明符之后

给我这些错误的代码是:

class foo{
protected:
vector <int> v;
v.push_back(4);
};

int main() {
return(0);
}
你能帮帮我吗?我正在使用Xcode for mac os X作为我的IDE;我已经搜索了我的问题的解决方案,但我一无所获。

提前致谢。

3 个答案:

答案 0 :(得分:1)

您需要在成员函数中填充矢量成员,例如构造函数:

class foo{
protected:
    vector <int> v;

public:
    foo()
    {
        v.push_back(4);
    }
};

答案 1 :(得分:1)

语句v.push_back(4)不会在类的主体内编译,因为这样的语句是不允许的。只有声明。因此,它被认为是语法错误。您可以从构造函数初始化向量:

foo::foo()
    : v{ 4 }
{
    // or
    v.push_back(4);
}

或使用 aggregate-initialization (C ++ 11)在类中:

class foo
{
    std::vector<int> v{4};
    //                ^^^
};

答案 2 :(得分:0)

函数调用

v.push_back(4);

不在函数中。如果它不在函数中,你希望它何时执行?

修复:

class Foo {
protected:
     vector<int> v;
public:
     Foo();  // Constructor declaration
};

Foo::Foo() { // Note: This should be in a source file
    v.push_back(4);
}

这意味着在实例化类时向向量添加4。由于该类具有空白构造函数,因此会立即发生。