C++ 初始化我自己的类类型的向量

C++ 初始化我自己的类类型的向量,c++,vector,c++11,C++,Vector,C++11,我试图声明我自己的类类型(SY::Symbol)的静态向量,如下所示: 符号表.h namespace SYT { class SymbolsTable { public: static std::vector<SY::Symbol> m_symbols; void addToken(TK::Token); }; } namespace-SYT { 类符号表 { 公众: 静态st

我试图声明我自己的类类型(SY::Symbol)的静态向量,如下所示:

符号表.h

namespace SYT
{
    class SymbolsTable
    {
        public:
            static std::vector<SY::Symbol> m_symbols;
                    void addToken(TK::Token);
    };
}
namespace-SYT
{
类符号表
{
公众:
静态std::向量m_符号;
void addToken(TK::Token);
};
}
我想在SymbolsTable.cpp文件中的addToken方法中使用它

SymbolsTable.cpp

#include "../../includes/px/SymbolsTable.h"
#include "../../includes/px/Token.h"

#include <vector>
#include <string>
#include <iostream>
#include <algorithm>
#include <iterator>

std::vector<SY::Symbol> SYT::SymbolsTable::m_symbols(std::initializer_list<SY::Symbol>);

SYT::SymbolsTable::SymbolsTable()
{

}

void SYT::SymbolsTable::addToken(TK::Token token)
{
    int index = getSymbolIndex(token); 

    if(index == -1)
    {
        SY::Symbol symb(token, "");
        SYT::SymbolsTable::m_symbols.push_back(symb);
        token.setIndex(indexOf(m_symbols, symb)); 
    }
    else
    {
        token.setIndex(index);
    }       
}
#include“../../includes/px/SymbolsTable.h”
#包括“../../includes/px/Token.h”
#包括
#包括
#包括
#包括
#包括
std::vector SYT::SymbolsTable::m_符号(std::initializer_列表);
SYT::SymbolsTable::SymbolsTable()
{
}
void SYT::SymbolsTable::addToken(TK::Token Token)
{
int index=getSymbolIndex(令牌);
如果(索引==-1)
{
SY::符号symb(标记“”);
SYT::SymbolsTable::m_符号。向后推(symb);
setIndex(indexOf(m_符号,symb));
}
其他的
{
token.setIndex(索引);
}       
}
我尝试在SymbolsTable.cpp内的类之外声明和初始化它,但我发现了错误

错误:没有“std::vector” SYT::SymbolsTable::m_符号(std::初始值设定项_列表)' 在类“SYT::SymbolsTable”中声明的成员函数

如您所见,我必须对其进行初始化,因此我尝试使用此
初始值设定项\u list
,我不知道是否正确

所以,我知道我必须先初始化向量

我的问题是:

  • 在哪里初始化它
  • 如何将其本地化
    • 你可以直接写

      std::vector<SY::Symbol> SYT::SymbolsTable::m_symbols;
      
      std::vector SYT::SymbolsTable::m_符号;
      
      在cpp文件中

      这将使用默认构造函数,将向量初始化为空向量

      但是,很可能您并不真正想要静态成员,因为让非静态成员函数更新静态数据成员感觉非常错误。相反,您可能需要该类的静态实例。即使这可能是一个次优设计,但仍然可能是一个改进。

      std::initializer\u list
      
      std::initializer_list<SY::Symbol>
      
      这是一个类型,因此编译器将其作为未在指定范围内声明的函数定义来读取,从而导致错误

      你可以写

      std::vector<SY::Symbol> SYT::SymbolsTable::m_symbols;
      
      std::vector SYT::SymbolsTable::m炣符号;
      
      定义它,或者

      std::vector<SY::Symbol> SYT::SymbolsTable::m_symbols{1,2,3,4};
      
      std::vector SYT::SymbolsTable::m_符号{1,2,3,4};
      
      要对其进行初始化,请注意将1-4替换为有效的
      SY::Symbol
      对象