проблема с константным возвратом ссылки и векторами STL - PullRequest
2 голосов
/ 30 июня 2011

У меня проблемы со следующим фрагментом кода

    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 правильно работать с константными ссылками?

Ответы [ 2 ]

0 голосов
/ 30 июня 2011

Я не могу воспроизвести вашу проблему; следующие компилируются и прекрасно работают на 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 голосов
/ 30 июня 2011

Ваш код, как я пишу это:

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

Вместо symbol_data.vector:: напишите просто symbol_data..

Приветствия & hth.,

...