2013-02-15 177 views
1

我想声明我自己的类类型的静态向量(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,我不知道如果我这样做是正确的。

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

我的问题是:

  • 哪里初始化;
  • 如何解除它。
+0

为什么它是静态的? – Aleph 2013-02-15 17:52:49

回答

1

,你可以只写

std::vector<SY::Symbol> SYT::SymbolsTable::m_symbols; 
在cpp文件

这使用默认构造函数,将矢量初始化为空向量。然而,很可能你并不是真的想要一个静态的成员,因为它让非静态成员函数更新静态数据成员感觉非常不对。而您可能需要该类的静态实例。即使这可能是次优设计,但仍可能是一种改进。

2
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。