初始化向量
问题描述:
我想声明我自己的类类型的静态向量(SY ::符号)是这样的:初始化向量
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里面,但我GUET错误。
error: no 'std::vector SYT::SymbolsTable::m_symbols(std::initializer_list)' member function declared in class 'SYT::SymbolsTable'
正如你所看到的,我必须初始化它,所以我想利用这个initializer_list
,我不知道如果我这样做是正确的。
所以,我知道我必须在一切之前初始化矢量。
我的问题是:
- 哪里初始化;
- 如何解除它。
答
,你可以只写
std::vector<SY::Symbol> SYT::SymbolsTable::m_symbols;
在cpp文件
。
这使用默认构造函数,将矢量初始化为空向量。然而,很可能你并不是真的想要一个静态的成员,因为它让非静态成员函数更新静态数据成员感觉非常不对。而您可能需要该类的静态实例。即使这可能是次优设计,但仍可能是一种改进。
答
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。
为什么它是静态的? – Aleph 2013-02-15 17:52:49