获取LNK错误2001的头文件中的C ++静态变量

时间:2015-03-14 14:49:14

标签: c++ vector static linker-errors

我有一个非常基本的程序。我试图在一个类中创建一个静态向量,然后可以在我的整个程序中访问它,只是创建一个具有存储静态向量的类的实例。

这是我的测试程序

testClass.h

#pragma once

#include <vector>

class TestClass
{
public:
    TestClass();
    ~TestClass();

    static void AddNumber(int number);

    static std::vector<int> Numbers;
};

testClass.cpp

#include "TestClass.h"

TestClass::TestClass()
{
    Numbers.push_back(1);
    Numbers.push_back(2);
    Numbers.push_back(3);
}

TestClass::~TestClass()
{

}

void TestClass::AddNumber(int number)
{
    Numbers.push_back(number);
}

的main.cpp

#include "TestClass.h"
#include <iostream>

int main()
{
    TestClass testClass;

    testClass.AddNumber(4);

    for (int i = 0; i < testClass.Numbers.size(); i++)
    {
        std::cout << "Number at " << i << ", is : " << testClass.Numbers.at(i) << std::endl;
    }

    std::cin.get();
}

当我编译时,我正在

Error   2   error LNK2001: unresolved external symbol "public: static class std::vector<int,class std::allocator<int> > TestClass::Numbers" (?Numbers@TestClass@@2V?$vector@HV?$allocator@H@std@@@std@@A)   c:\Users\mainUser\documents\visual studio 2013\Projects\C++StaticClass\C++StaticClass\main.obj  C++StaticClass
Error   3   error LNK2001: unresolved external symbol "public: static class std::vector<int,class std::allocator<int> > TestClass::Numbers" (?Numbers@TestClass@@2V?$vector@HV?$allocator@H@std@@@std@@A)   c:\Users\mainUser\documents\visual studio 2013\Projects\C++StaticClass\C++StaticClass\TestClass.obj C++StaticClass
Error   4   error LNK1120: 1 unresolved externals   c:\users\mainUser\documents\visual studio 2013\Projects\C++StaticClass\Debug\C++StaticClass.exe 1   1   C++StaticClass

任何人都可以指出我如何解决问题的正确方向。

1 个答案:

答案 0 :(得分:1)

您需要在cpp文件中初始化静态变量。在testClass.cpp文件中添加以下行

std::vector<int> TestClass::Numbers;