【问题标题】:Initialize vector of my own class type初始化我自己的类类型的向量
【发布时间】:2013-02-16 01:52:38
【问题描述】:

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

SymbolsTable.h

namespace SYT
{
    class SymbolsTable
    {
        public:
            static std::vector<SY::Symbol> m_symbols;
                    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);
    }       
}

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

错误:没有'std::vector SYT::SymbolsTable::m_symbols(std::initializer_list)' 在类 'SYT::SymbolsTable' 中声明的成员函数

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

所以,我知道我必须在一切之前初始化向量。

我的问题是:

  • 在哪里初始化它;
  • 如何初始化它。

【问题讨论】:

    标签: c++ vector c++11


    【解决方案1】:
    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};
    

    初始化它 - 注意将 1-4 替换为有效的 SY::Symbol 对象。

    【讨论】:

      【解决方案2】:

      你可以写

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

      在 cpp 文件中。

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多