Статическое векторное изменение размера - PullRequest
0 голосов
/ 03 февраля 2012

Я хочу создать статический вектор в классе и изменить размеры векторов при их создании.Я пытаюсь сделать это в конструкторе или в основной функции.Но я не могу заставить его работать.Проблема в том, что я не могу вызвать функцию векторного класса таким образом.Вот что у меня сейчас:

#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;

}

Мне нужно обработать все данные вектора в каждом объекте, поэтому я хочу сделать вектор статичным.

Может кто-нибудь помочьмне с этим?Спасибо!

Редактировать: грамматик.Каждый метод, который я пробовал, выдает ошибку компиляции.

Ответы [ 2 ]

3 голосов
/ 03 февраля 2012

Когда вы объявляете атрибут статического члена, вам также необходимо определить it:

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 голос
/ 03 февраля 2012

Вам необходимо определить статические элементы в файле реализации.

как в main.cpp:

vector<int> Test::testvec;

int main() {
 ...
}
...