const引用返回和STL向量的问题

时间:2011-06-30 05:52:55

标签: c++ stl vector reference const

我遇到以下代码片段的问题

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

这里,symbol_data是类的私有成员,是一个向量

:: at是我定义的符号类中的成员函数。

当我尝试编译此代码时,我收到以下错误消息:

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

但是,如果我将函数原型更改为

,则没有错误
    string symbol::at(int index) {...}

有人知道如何让STL向量与const引用一起正常工作吗?

2 个答案:

答案 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.

干杯&amp;第h。,

答案 1 :(得分: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;
}