2012-02-03 88 views
-1

我想在一个类中创建一个静态矢量,并且我想在创建矢量时调整大小。我试图在构造函数或主函数中执行此操作。但我无法让它工作。问题是我不能通过这种方式调用vector类的函数。 这是我现在有:静态矢量调整大小

#include <vector> 

using namespace std; 

class test 
{ 
public: 
    static vector<int> testvec; 
    test(); 
}; 

test::test() //Not static 
{ 
    test::testvec.resize(0); //Try 1 
} 

vector<int> test::testvec.resize(0); //Try 2 

int main() 
{ 
    test::testvec.resize(0); //Try 3 
    test testclass; 


    system("pause"); 
    return false; 

} 

我需要处理在每个对象的矢量的所有数据,这就是为什么我想要的矢量静态的。

有人可以帮助我吗? 谢谢!

编辑:语法。我尝试过的每种方法都会导致编译错误。

+0

你确定你的方法是真正的最好的吗?如果你在某个时候需要两个独立的'test'对象组? 'shared_ptr'解决方案可能更好。 (静态数据有时可能很好,但它应该是const或者至少是const类似的;即一个对象做什么决不应该能够给其他对象造成问题,但调整为0看起来很麻烦。) – leftaroundabout 2012-02-03 18:49:48

+0

您需要转发声明静态变量。在Try 1中没有这样的静态构造函数。在尝试2中,您不能全局调用静态成员的方法。在Try 3中,您将调用'.resize(0)'两次。如果你想在你的构造函数中清除(),那么静态成员可能不是必需的。另外,不要从main返回'bool',并避免一般的'system'。 – AJG85 2012-02-03 18:50:23

+0

@ AJG85:您需要*定义*静态变量(以及所有变量,只是非外部声明也是大多数其他类型变量的定义)。你*不能转发declare *任何变量。 – 2012-02-03 18:59:36

回答

3

在声明静态成员属性还需要定义它:

class test { 
public: 
    static std::vector<int> v; // declaration 
}; 
std::vector<int> test::v; // definition, note: no `static` here 

您可以选择使用一个大小的构造,这将避免需要调整大小:

std::vector<int> test::v(10); // definition, create it with size==10 

但你可以直到调用调整大小main如果你愿意:

int main() { 
    test::v.resize(20); 
} 
1

您需要在实现文件中定义静态成员。

像main.cpp中:

vector<int> Test::testvec; 

int main() { 
... 
} 
+0

该环境中的'static'关键字具有不同的含义,应该删除。 – 2012-02-03 18:49:08

+0

其实你不会在前向声明中重复'static'关键字。 – AJG85 2012-02-03 18:50:11

+0

@ AJG85:即*不是前向声明,它是静态成员的*定义*。 testvec;类中的静态向量只是一个*声明*,而不是一个定义。 – 2012-02-03 18:53:25