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

Initialize vector of my own class type

本文关键字:向量 类型 我自己 初始化      更新时间:2023-10-16

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

符号表.h

namespace SYT
{
    class SymbolsTable
    {
        public:
            static std::vector<SY::Symbol> m_symbols;
                    void addToken(TK::Token);
    };
}

我想在SymbolsTable.cpp文件中的addToken方法中使用它。

符号表.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);
    }       
}

我曾尝试在SymbolsTable.cpp中的类外声明和初始化它,但我发现了错误。

错误:no'std::vectorSYT::SymbolsTable::m_symbol(std::initializer_list)'在类"SYT::SymbolsTable"中声明的成员函数

正如你所看到的,我必须初始化它,所以我尝试使用这个initializer_list,我不知道我做得是否正确。

所以,我知道,在做任何事情之前,我必须初始化向量。

我的问题是:

  • 在哪里初始化它
  • 如何将其小型化
std::initializer_list<SY::Symbol>

这是一个类型,因此编译器将其读取为未在指定范围内声明的函数定义,从而导致错误。

你可以写

std::vector<SY::Symbol> SYT::SymbolsTable::m_symbols;

只是定义它,或者

std::vector<SY::Symbol> SYT::SymbolsTable::m_symbols{1,2,3,4};

要初始化它,请注意用有效的SY::Symbol对象替换1-4。

您只需编写

std::vector<SY::Symbol> SYT::SymbolsTable::m_symbols;

在cpp文件中。

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

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