2011-06-30 34 views
2

我有代码问题常引用回报,STL向量

string const& symbol::at(int index) const { 
    assert(index<symbol_data.vector::size()); 
    return symbol_data.vector::at(index); 
    } 

在这里,下面的代码片段问题,symbol_data是类的私有成员,是一个矢量

::在为我定义的符号类中的成员函数。

当我尝试编译这段代码,我得到以下错误消息话题:

error: ‘template<class _Tp, class _Alloc> class std::vector’ used without template parameters 

然而,有没有错误,如果我改变函数原型

string symbol::at(int index) {...} 

有谁知道我可以使STL向量与const引用正常工作?

+0

你可以发布一个完整的例子,可以独立编译? (最好尽可能小一些) –

回答

0

你的代码,我写这篇文章:

string const& symbol::at(int index) const { 
    assert(index<symbol_data.vector::size()); 
    return symbol_data.vector::at(index); 
    } 

而不是symbol_data.vector::写只是symbol_data.

干杯&心连心,

+2

这就是我的想法,但我所有的编译器都接受'symbol_data.vector :: at(index);'... –

+0

@James:呵呵。你能发布一个完整的例子吗? –

+0

'int main(){std :: vector ().vector :: begin(); }'铿锵3.0/133044,Visual C++ 2010 SP1和g ++ 4.5.1都接受(用'#include ',自然)。我很惊讶! –

0

我无法重现你的问题。以下编译并在VS2010 express上正常工作。

#include <cassert> 
#include <iostream> 
#include <string> 
#include <vector> 

class symbol 
{ 
    std::vector<std::string> symbol_data; 

public: 
    symbol() 
    { 
    symbol_data.push_back("Str1"); 
    symbol_data.push_back("Str2"); 
    } 

    std::string const& at(int index) const 
    { 
    assert(index < symbol_data.vector::size()); 

    return symbol_data.vector::at(index); 
    } 
}; 

int main() 
{ 
    symbol s; 

    std::cout << s.at(0) << std::endl; 
    std::cin.get(); 

    return 0; 
} 
+0

是的,这或多或少是我的完整代码。删除vector ::它编译得很好,但它不会编译你写它的方式。 – user788171