初始化我自己类类型的向量
Initialize vector of my own class type
我正试图声明我自己类类型的静态向量(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文件中。
这使用默认的构造函数,将向量初始化为空向量。
然而,很可能您并不真正想要静态成员,因为让非静态成员函数更新静态数据成员感觉非常错误。相反,您可能想要该类的静态实例。即便如此,这也可能是一个次优设计,但仍可能是一种改进。
相关文章:
- C++中函数的向量返回类型引发错误
- 具有 STL 向量类型成员的类的复制内存
- 创建一个类来访问和指定向量类型,并构建一个获取位置并为其分配区域的类
- 是否可以有一个模板函数,可以将向量和非向量类型都作为参数
- 具有基元类型的模板向量类型
- 在索引和值类型上参数化的惯用向量类型
- 使用迭代器成员函数是否仅适用于某些向量类型"empty()"?
- 通过glUniform 将 GLM 的向量类型传递给 OpenGL
- 尝试将用户定义的向量类型插入用户定义的类型向量
- 使用类作为向量类型时出错 - "Undeclared identifier"
- 在C++中,当两个向量类型不同时,如何将值存储到向量内部的向量中
- 如何访问和存储向量类型的结构成员
- 按参数中的向量类型重载函数
- boost::variant:具有递归向量类型的奇怪行为
- LLVM 传递计数向量类型指令
- 用异构boost::融合向量类型数据填充std::vector
- 如何定义自定义类的向量类型
- 真正的动态向量类型
- 如何在类的属性/变量中使用组合类作为向量类型
- 更快地删除向量类型