Ошибка vector не является шаблоном

I am currently trying to follow a tutorial on making a simple 2D tile engine for top-down RPGs. For some reason though I get the intellisense error

vector is not a template

The word «vector» is underlined with red. Why does this not work? Why is it telling me that it’s a template, and why does the mean the program won’t work?

#ifndef _IMAGEMANAGER_H
#define _IMAGEMANAGER_H

#include <vector>
#include <SFMLGraphics.hpp>

class ImageManager
{
private:
    vector<sf::Texture> textureList;

public:
    ImageManager();
    ~ImageManager();

    void AddTexture(sf::Texture& texture);
    sf::Texture& GetTexture(int index);
};
#endif

Errors I get (no doubt some of these spawn from the error of this part above):

  • Error 1 error C2143: syntax error : missing ‘;’ before ‘<‘ c:users<omitted>dropboxcomputer scienceprogrammingvisual studio
    2012projectssfml-appsfml-appimagemanager.h 10 1 sfml-app

  • Error 2 error C4430: missing type specifier — int assumed. Note: C++ does not support default-int c:users<omitted>dropboxcomputer
    scienceprogrammingvisual studio
    2012projectssfml-appsfml-appimagemanager.h 10 1 sfml-app

  • Error 3 error C2238: unexpected token(s) preceding ‘;’ c:users<omitted>dropboxcomputer scienceprogrammingvisual studio
    2012projectssfml-appsfml-appimagemanager.h 10 1 sfml-app

  • Error 4 error C2143: syntax error : missing ‘;’ before ‘<‘ c:users<omitted>dropboxcomputer scienceprogrammingvisual studio
    2012projectssfml-appsfml-appimagemanager.h 10 1 sfml-app

  • Error 5 error C4430: missing type specifier — int assumed. Note: C++ does not support default-int c:users<omitted>dropboxcomputer
    scienceprogrammingvisual studio
    2012projectssfml-appsfml-appimagemanager.h 10 1 sfml-app

  • Error 6 error C2238: unexpected token(s) preceding ‘;’ c:users<omitted>dropboxcomputer scienceprogrammingvisual studio
    2012projectssfml-appsfml-appimagemanager.h 10 1 sfml-app

  • Error 7 error C2065: ‘textureList’ : undeclared identifier c:users<omitted>dropboxcomputer scienceprogrammingvisual
    studio 2012projectssfml-appsfml-appimagemanager.cpp 22 1 sfml-app

  • Error 8 error C2143: syntax error : missing ‘;’ before ‘<‘ c:users<omitted>dropboxcomputer scienceprogrammingvisual studio
    2012projectssfml-appsfml-appimagemanager.h 10 1 sfml-app

  • Error 9 error C4430: missing type specifier — int assumed. Note: C++ does not support default-int c:users<omitted>dropboxcomputer
    scienceprogrammingvisual studio
    2012projectssfml-appsfml-appimagemanager.h 10 1 sfml-app

  • Error 10 error C2238: unexpected token(s) preceding ‘;’ c:users<omitted>dropboxcomputer scienceprogrammingvisual studio
    2012projectssfml-appsfml-appimagemanager.h 10 1 sfml-app

  • 11 IntelliSense: vector is not a template c:Users<omitted>DropboxComputer ScienceProgrammingVisual
    Studio 2012Projectssfml-appsfml-appImageManager.h 10 2 sfml-app

asked May 23, 2013 at 1:11

OmniOwl's user avatar

OmniOwlOmniOwl

5,44716 gold badges67 silver badges116 bronze badges

3

vector is from the std namespace, so you must use std:: to specify:

std::vector<sf::Texture> textureList;

Or you can use a using statement:

using std::vector;

vector<sf::Texture> textureList;

answered May 23, 2013 at 1:15

David G's user avatar

David GDavid G

94.3k41 gold badges166 silver badges253 bronze badges

5

Since I don’t see any using statements in your code sample, I am pretty sure you need to add std:: to your vector declaration, like so:

std::vector<sf::Texture> textureList;

answered May 23, 2013 at 1:15

Shafik Yaghmour's user avatar

Shafik YaghmourShafik Yaghmour

153k39 gold badges435 silver badges736 bronze badges

2

DaniilGalizkiy

0 / 0 / 0

Регистрация: 22.05.2022

Сообщений: 3

1

Выдаёт ошибку, что вектор не является шаблоном

22.05.2022, 15:41. Показов 2945. Ответов 4

Метки vector. c++ (Все метки)


Студворк — интернет-сервис помощи студентам

Добрый день. Столкнулся со следующей проблемой: в файле .cpp VS2019 вектор определяется и код работает отлично, но если вынести класс в заголовочный файл — выдаёт ошибку, что вектор не является шаблоном:

Заголовочный файл:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#pragma once
 
class User
{
private:
    vector <string> name; // строковый вектор имён
    vector <string> IDE;  // строковый вектор IDE
    vector <int> licens;  // числовой вектор номера лицензии
public:
    static int count;
    User(); // конструктор
    void output();
 
};

————————————————————————-

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
Исполнительный файл:
#include <iostream>
#include <locale>
#include <fstream>
#include <string>
#include <vector>
using namespace std;
 
User::User(){
        ifstream ifst("test.txt"); // подключение файла
 
        while (!ifst.eof())
        {
            string tempn;
            string tempi;
            int templ;
 
            ifst >> tempn >> tempi >> templ;
 
            name.push_back(tempn);// вставляем в вектор имя из файла
            IDE.push_back(tempi);// вставляем в вектор айди из файла
            licens.push_back(templ);// вставляем в вектор лицензию из файла
 
            count++;
        }
}
 
void User::output()
{
    string n;
    int x = 0;
    cout << "name: " << endl;
    cin >> n;
    for (int i = 0; i < count; i++)
    {
        if (name[i] == n && licens[i] != x) {
            cout << "name: " << name[i] << "   IDE: "<< IDE[i] << "   licens: " << licens[i] << endl;
        }
    }
}
 
int User::count = 0;
 
int main(void)
{
    setlocale(0, "");
    User list;
    cout << list.count << " ";
    cout << "User in list:n";
    list.output();
    cin.get();
}

Кто-нибудь знает где ошибка?



0



programmer_08

681 / 439 / 208

Регистрация: 18.10.2020

Сообщений: 1,589

22.05.2022, 16:02

2

Лучший ответ Сообщение было отмечено DaniilGalizkiy как решение

Решение

перенесите

C++
1
2
3
#include <string>
#include <vector>
using namespace std;

в заголовочный файл.
и вставьте

C++
1
#include "funcs.h"

в исполнительный файл



1



0 / 0 / 0

Регистрация: 22.05.2022

Сообщений: 3

22.05.2022, 16:24

 [ТС]

3

Большое спасибо. Действительно, надо было перенести из исполнительного в заголовочный указанные вами три строки и код заработал)



0



Nishen

1174 / 835 / 359

Регистрация: 26.02.2015

Сообщений: 3,743

22.05.2022, 16:36

4

Цитата
Сообщение от programmer_08
Посмотреть сообщение

перенесите

Плохой совет. Не используй using namespace в глобальной области видимости. Подключи нужные заголовки и пиши std::vector.

Цитата
Сообщение от DaniilGalizkiy
Посмотреть сообщение

static int count;

Зачем она в секции public? Пользователь класса сможет менять его состояние ведь напрямую.

Добавлено через 6 минут
У тебя класс User, что подразумевает пользователя (одного), а по факту он содержит в себе МНОГО пользователей. Было бы логично завести тип User с двумя полями string и одним — int, а потом уже в векторе держать User.

C++
1
std::vector<User> users;



1



0 / 0 / 0

Регистрация: 22.05.2022

Сообщений: 3

23.05.2022, 16:22

 [ТС]

5

Проще заполнять информацией из файла, когда класс с векторными свойствами. Понятия не имею как сделать вектор классов, и чтобы каждый класс отдельно заполнялся одним файлом)



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

23.05.2022, 16:22

5

В настоящее время я пытаюсь следовать учебному пособию по созданию простого 2D-мозаичного движка для RPG сверху вниз. По какой-то причине, хотя я получаю ошибку intellisense

vector is not a template

Слово «вектор» подчеркнуто красным. Почему это не работает? Почему это говорит мне, что это шаблон, и почему означает, что программа не будет работать?

#ifndef _IMAGEMANAGER_H
#define _IMAGEMANAGER_H

#include <vector>
#include <SFMLGraphics.hpp>

class ImageManager
{
private:
    vector<sf::Texture> textureList;

public:
    ImageManager();
    ~ImageManager();

    void AddTexture(sf::Texture& texture);
    sf::Texture& GetTexture(int index);
};
#endif

Ошибки, которые я получаю (без сомнения, некоторые из них возникают из-за ошибки этой части выше):

  • Ошибка 1 ошибка C2143: синтаксическая ошибка: отсутствует ‘;’ перед ‘<‘ c:usersvipardropboxинформатикапрограммированиевизуальная студия 2012projectssfml-appsfml-appimagemanager.h 10 1 sfml-app

  • Ошибка 2 ошибки C4430: отсутствует спецификатор типа — int. Примечание: С++ не поддерживает default-int c:usersvipardropboxcomputer
    наукапрограммированиевизуальная студия
    2012projectssfml-appsfml-appimagemanager.h 10 1 sfml-app

  • Ошибка 3 ошибки C2238: неожиданный токен (ы), предшествующий ‘;’ c:usersvipardropboxинформатикапрограммированиевизуальная студия 2012projectssfml-appsfml-appimagemanager.h 10 1 sfml-app

  • Ошибка 4 ошибка C2143: синтаксическая ошибка: отсутствует ‘;’ перед ‘<‘ c:usersvipardropboxинформатикапрограммированиевизуальная студия 2012projectssfml-appsfml-appimagemanager.h 10 1 sfml-app

  • Ошибка 5 Ошибка C4430: отсутствует спецификатор типа — int. Примечание: С++ не поддерживает default-int c:usersvipardropboxcomputer
    наукапрограммированиевизуальная студия
    2012projectssfml-appsfml-appimagemanager.h 10 1 sfml-app

  • Ошибка 6 ошибки C2238: неожиданный токен (ы), предшествующий ‘;’ c:usersvipardropboxинформатикапрограммированиевизуальная студия 2012projectssfml-appsfml-appimagemanager.h 10 1 sfml-app

  • Ошибка 7 ошибки C2065: ‘textureList’: необъявленный идентификатор c:usersvipardropboxcomputer scienceprogrammingvisual studio 2012projectssfml-appsfml-appimagemanager.cpp 22 1 sfml-app

  • Ошибка 8 ошибка C2143: синтаксическая ошибка: отсутствует ‘;’ перед ‘<‘ c:usersvipardropboxинформатикапрограммированиевизуальная студия 2012projectssfml-appsfml-appimagemanager.h 10 1 sfml-app

  • Ошибка 9 ошибки C4430: отсутствует спецификатор типа — int. Примечание: С++ не поддерживает default-int c:usersvipardropboxcomputer
    наукапрограммированиевизуальная студия
    2012projectssfml-appsfml-appimagemanager.h 10 1 sfml-app

  • Ошибка 10 ошибка C2238: неожиданный токен (ы), предшествующий ‘;’ c:usersvipardropboxинформатикапрограммированиевизуальная студия 2012projectssfml-appsfml-appimagemanager.h 10 1 sfml-app

  • 11 IntelliSense: вектор не является шаблоном c:UsersViparDropboxComputer ScienceProgrammingVisual
    Studio 2012Projectssfml-appsfml-appImageManager.h 10 2 sfml-app

I’m trying to compile parts of the Nurbs++ library and getting a bunch of errors like the following. Why?

nurbs_pp/matrix/source/vector.cpp:49:20: error: ‘Vector’ is not a template
nurbs_pp/matrix/source/vector.cpp:49:37: error: expected initializer before ‘<’ token

In vector.h:

namespace PLib {

  template <class T> class Vector ;

  template<class T> class Vector : public BasicArray<T>
  {
  public:
    int rows() const //!< a reference to the size of the vector                                                                                                                                                     
      { return this->sze ;}
    Vector() : BasicArray<T>(1) {} //!< Basic constructor                                                                                                                                                           
    Vector(const int r) : BasicArray<T>(r) {}
    Vector(const Vector<T>& v) : BasicArray<T>(v) {}
    Vector(const BasicArray<T>& v) : BasicArray<T>(v)  {}
    Vector(T* ap, const int size) : BasicArray<T>(ap,size) {}
    Vector(BasicList<T>& list) : BasicArray<T>(list) {}

    virtual ~Vector() {}

    Vector<T>& operator=(const Vector<T>& v);
    Vector<T>& operator=(const BasicArray<T>& b);

in vector.cpp:

namespace PLib {

  template <class T> Vector<T>& Vector<T>::operator=(const Vector<T> &b)

DaniilGalizkiy

0 / 0 / 0

Регистрация: 22.05.2022

Сообщений: 3

1

Выдаёт ошибку, что вектор не является шаблоном

22.05.2022, 15:41. Показов 2872. Ответов 4

Метки vector. c++ (Все метки)


Студворк — интернет-сервис помощи студентам

Добрый день. Столкнулся со следующей проблемой: в файле .cpp VS2019 вектор определяется и код работает отлично, но если вынести класс в заголовочный файл — выдаёт ошибку, что вектор не является шаблоном:

Заголовочный файл:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#pragma once
 
class User
{
private:
    vector <string> name; // строковый вектор имён
    vector <string> IDE;  // строковый вектор IDE
    vector <int> licens;  // числовой вектор номера лицензии
public:
    static int count;
    User(); // конструктор
    void output();
 
};

————————————————————————-

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
Исполнительный файл:
#include <iostream>
#include <locale>
#include <fstream>
#include <string>
#include <vector>
using namespace std;
 
User::User(){
        ifstream ifst("test.txt"); // подключение файла
 
        while (!ifst.eof())
        {
            string tempn;
            string tempi;
            int templ;
 
            ifst >> tempn >> tempi >> templ;
 
            name.push_back(tempn);// вставляем в вектор имя из файла
            IDE.push_back(tempi);// вставляем в вектор айди из файла
            licens.push_back(templ);// вставляем в вектор лицензию из файла
 
            count++;
        }
}
 
void User::output()
{
    string n;
    int x = 0;
    cout << "name: " << endl;
    cin >> n;
    for (int i = 0; i < count; i++)
    {
        if (name[i] == n && licens[i] != x) {
            cout << "name: " << name[i] << "   IDE: "<< IDE[i] << "   licens: " << licens[i] << endl;
        }
    }
}
 
int User::count = 0;
 
int main(void)
{
    setlocale(0, "");
    User list;
    cout << list.count << " ";
    cout << "User in list:n";
    list.output();
    cin.get();
}

Кто-нибудь знает где ошибка?

0

programmer_08

681 / 439 / 208

Регистрация: 18.10.2020

Сообщений: 1,589

22.05.2022, 16:02

2

Лучший ответ Сообщение было отмечено DaniilGalizkiy как решение

Решение

перенесите

C++
1
2
3
#include <string>
#include <vector>
using namespace std;

в заголовочный файл.
и вставьте

C++
1
#include "funcs.h"

в исполнительный файл

1

0 / 0 / 0

Регистрация: 22.05.2022

Сообщений: 3

22.05.2022, 16:24

 [ТС]

3

Большое спасибо. Действительно, надо было перенести из исполнительного в заголовочный указанные вами три строки и код заработал)

0

Nishen

1174 / 835 / 359

Регистрация: 26.02.2015

Сообщений: 3,743

22.05.2022, 16:36

4

Цитата
Сообщение от programmer_08
Посмотреть сообщение

перенесите

Плохой совет. Не используй using namespace в глобальной области видимости. Подключи нужные заголовки и пиши std::vector.

Цитата
Сообщение от DaniilGalizkiy
Посмотреть сообщение

static int count;

Зачем она в секции public? Пользователь класса сможет менять его состояние ведь напрямую.

Добавлено через 6 минут
У тебя класс User, что подразумевает пользователя (одного), а по факту он содержит в себе МНОГО пользователей. Было бы логично завести тип User с двумя полями string и одним — int, а потом уже в векторе держать User.

C++
1
std::vector<User> users;

1

0 / 0 / 0

Регистрация: 22.05.2022

Сообщений: 3

23.05.2022, 16:22

 [ТС]

5

Проще заполнять информацией из файла, когда класс с векторными свойствами. Понятия не имею как сделать вектор классов, и чтобы каждый класс отдельно заполнялся одним файлом)

0

IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

23.05.2022, 16:22

5

I am currently trying to follow a tutorial on making a simple 2D tile engine for top-down RPGs. For some reason though I get the intellisense error

vector is not a template

The word «vector» is underlined with red. Why does this not work? Why is it telling me that it’s a template, and why does the mean the program won’t work?

#ifndef _IMAGEMANAGER_H
#define _IMAGEMANAGER_H

#include <vector>
#include <SFMLGraphics.hpp>

class ImageManager
{
private:
    vector<sf::Texture> textureList;

public:
    ImageManager();
    ~ImageManager();

    void AddTexture(sf::Texture& texture);
    sf::Texture& GetTexture(int index);
};
#endif

Errors I get (no doubt some of these spawn from the error of this part above):

  • Error 1 error C2143: syntax error : missing ‘;’ before ‘<‘ c:users<omitted>dropboxcomputer scienceprogrammingvisual studio
    2012projectssfml-appsfml-appimagemanager.h 10 1 sfml-app

  • Error 2 error C4430: missing type specifier — int assumed. Note: C++ does not support default-int c:users<omitted>dropboxcomputer
    scienceprogrammingvisual studio
    2012projectssfml-appsfml-appimagemanager.h 10 1 sfml-app

  • Error 3 error C2238: unexpected token(s) preceding ‘;’ c:users<omitted>dropboxcomputer scienceprogrammingvisual studio
    2012projectssfml-appsfml-appimagemanager.h 10 1 sfml-app

  • Error 4 error C2143: syntax error : missing ‘;’ before ‘<‘ c:users<omitted>dropboxcomputer scienceprogrammingvisual studio
    2012projectssfml-appsfml-appimagemanager.h 10 1 sfml-app

  • Error 5 error C4430: missing type specifier — int assumed. Note: C++ does not support default-int c:users<omitted>dropboxcomputer
    scienceprogrammingvisual studio
    2012projectssfml-appsfml-appimagemanager.h 10 1 sfml-app

  • Error 6 error C2238: unexpected token(s) preceding ‘;’ c:users<omitted>dropboxcomputer scienceprogrammingvisual studio
    2012projectssfml-appsfml-appimagemanager.h 10 1 sfml-app

  • Error 7 error C2065: ‘textureList’ : undeclared identifier c:users<omitted>dropboxcomputer scienceprogrammingvisual
    studio 2012projectssfml-appsfml-appimagemanager.cpp 22 1 sfml-app

  • Error 8 error C2143: syntax error : missing ‘;’ before ‘<‘ c:users<omitted>dropboxcomputer scienceprogrammingvisual studio
    2012projectssfml-appsfml-appimagemanager.h 10 1 sfml-app

  • Error 9 error C4430: missing type specifier — int assumed. Note: C++ does not support default-int c:users<omitted>dropboxcomputer
    scienceprogrammingvisual studio
    2012projectssfml-appsfml-appimagemanager.h 10 1 sfml-app

  • Error 10 error C2238: unexpected token(s) preceding ‘;’ c:users<omitted>dropboxcomputer scienceprogrammingvisual studio
    2012projectssfml-appsfml-appimagemanager.h 10 1 sfml-app

  • 11 IntelliSense: vector is not a template c:Users<omitted>DropboxComputer ScienceProgrammingVisual
    Studio 2012Projectssfml-appsfml-appImageManager.h 10 2 sfml-app

asked May 23, 2013 at 1:11

OmniOwl's user avatar

OmniOwlOmniOwl

5,43716 gold badges67 silver badges116 bronze badges

3

vector is from the std namespace, so you must use std:: to specify:

std::vector<sf::Texture> textureList;

Or you can use a using statement:

using std::vector;

vector<sf::Texture> textureList;

answered May 23, 2013 at 1:15

David G's user avatar

David GDavid G

94.2k41 gold badges166 silver badges253 bronze badges

5

Since I don’t see any using statements in your code sample, I am pretty sure you need to add std:: to your vector declaration, like so:

std::vector<sf::Texture> textureList;

answered May 23, 2013 at 1:15

Shafik Yaghmour's user avatar

Shafik YaghmourShafik Yaghmour

153k39 gold badges434 silver badges736 bronze badges

2

I’m trying to compile parts of the Nurbs++ library and getting a bunch of errors like the following. Why?

nurbs_pp/matrix/source/vector.cpp:49:20: error: ‘Vector’ is not a template
nurbs_pp/matrix/source/vector.cpp:49:37: error: expected initializer before ‘<’ token

In vector.h:

namespace PLib {

  template <class T> class Vector ;

  template<class T> class Vector : public BasicArray<T>
  {
  public:
    int rows() const //!< a reference to the size of the vector                                                                                                                                                     
      { return this->sze ;}
    Vector() : BasicArray<T>(1) {} //!< Basic constructor                                                                                                                                                           
    Vector(const int r) : BasicArray<T>(r) {}
    Vector(const Vector<T>& v) : BasicArray<T>(v) {}
    Vector(const BasicArray<T>& v) : BasicArray<T>(v)  {}
    Vector(T* ap, const int size) : BasicArray<T>(ap,size) {}
    Vector(BasicList<T>& list) : BasicArray<T>(list) {}

    virtual ~Vector() {}

    Vector<T>& operator=(const Vector<T>& v);
    Vector<T>& operator=(const BasicArray<T>& b);

in vector.cpp:

namespace PLib {

  template <class T> Vector<T>& Vector<T>::operator=(const Vector<T> &b)

Я пытаюсь собрать части библиотеки Nurbs++ и получить кучу ошибок, как показано ниже. Зачем?

nurbs_pp/matrix/source/vector.cpp:49:20: error: ‘Vector is not a template
nurbs_pp/matrix/source/vector.cpp:49:37: error: expected initializer before ‘< token

В vector.h:

namespace PLib {

template <class T> class Vector ;

template<class T> class Vector : public BasicArray<T>
{
public:
int rows() const //!< a reference to the size of the vector
{ return this->sze ;}
Vector() : BasicArray<T>(1) {} //!< Basic constructor
Vector(const int r) : BasicArray<T>(r) {}
Vector(const Vector<T>& v) : BasicArray<T>(v) {}
Vector(const BasicArray<T>& v) : BasicArray<T>(v) {}
Vector(T* ap, const int size) : BasicArray<T>(ap,size) {}
Vector(BasicList<T>& list) : BasicArray<T>(list) {}

virtual ~Vector() {}

Vector<T>& operator=(const Vector<T>& v);
Vector<T>& operator=(const BasicArray<T>& b);

в vector.cpp:

namespace PLib {

template <class T> Vector<T>& Vector<T>::operator=(const Vector<T> &b)

От: Аноним  
Дата:  06.01.07 16:11
Оценка:

Имеется шаблон

template<class T>
struct StringCollection
{
void Proc()
{
T<string> tv;
}
};

StringCollection<vector> tas;
tas.Proc();

Почему так нельзя?

error C3203: ‘vector’ : unspecialized class template can’t be used as a template argument for template parameter ‘T’, expected a real type


Re: Непонятки с шаблонами.

От:

Aznog

Россия

 
Дата:  06.01.07 16:32
Оценка:

Здравствуйте, Аноним, Вы писали:

std::vector является шаблоном, для передачи шаблона в неспециализированном виде в качестве параметра другого шаблона следует воспользоваться вот такой конструкцией:

template<template <class, class> class T>
struct StringCollection
{
   void Proc()
   {
      T<std::string, std::allocator<std::string> > tv;
   }
};

StringCollection<std::vector> tas;
tas.Proc();


Re: Непонятки с шаблонами.

От:

IROV..

 
Дата:  06.01.07 16:34
Оценка:

Здравствуйте, Аноним, Вы писали:

А>Имеется шаблон


А>template<template <class, class> class T>

А>struct StringCollection
А>{
А> void Proc()
А> {
А> T<string> tv;
А> }
А>};

А>StringCollection<vector> tas;

А>tas.Proc();

А>Почему так нельзя?


А>error C3203: ‘vector’ : unspecialized class template can’t be used as a template argument for template parameter ‘T’, expected a real type

я не волшебник, я только учусь!


Re[2]: Непонятки с шаблонами.

От:

Константин Л.

Франция

 
Дата:  06.01.07 18:35
Оценка:

Здравствуйте, IROV.., Вы писали:

IRO>Здравствуйте, Аноним, Вы писали:


А>>Имеется шаблон


А>>template<template <class, class> class T>

А>>struct StringCollection
А>>{
А>> void Proc()
А>> {
А>> T<string> tv;
А>> }
А>>};

А>>StringCollection<vector> tas;

А>>tas.Proc();

А>>Почему так нельзя?


А>>error C3203: ‘vector’ : unspecialized class template can’t be used as a template argument for template parameter ‘T’, expected a real type

а зачем второй шаблонный параметр?


Re[3]: Непонятки с шаблонами.

От:

Roman Odaisky

Украина

 
Дата:  06.01.07 19:26
Оценка:

:)

Здравствуйте, Константин Л., Вы писали:

А>>>template<template <class, class> class T>


КЛ>а зачем второй шаблонный параметр?

RTFM!

Class template vector

template <class T, class Allocator = allocator<T> >
class vector;

До последнего не верил в пирамиду Лебедева.


Re[4]: Непонятки с шаблонами.

От:

Константин Л.

Франция

 
Дата:  06.01.07 22:17
Оценка:

Здравствуйте, Roman Odaisky, Вы писали:

RO>Здравствуйте, Константин Л., Вы писали:


А>>>>template<template <class, class> class T>


КЛ>>а зачем второй шаблонный параметр?


RO>RTFM!


RO>Class template vector

RO>

RO>template <class T, class Allocator = allocator<T> >
RO>class vector;
RO>

думаешь я этого не знал? Просто из


template <class T>
...

T<string> tv;

не видно, что T шаблонный класс с 2-мя параметрами. На конкретную специализацию я даже не смотрел. Странно подбирать параметры шаблона под конкретную специализацию, ты не считаешь?


Re[5]: Непонятки с шаблонами.

От:

Константин Л.

Франция

 
Дата:  06.01.07 22:19
Оценка:

Здравствуйте, Константин Л., Вы писали:

[]

КЛ>не видно, что T шаблонный класс с 2-мя параметрами. На конкретную специализацию я даже не смотрел. Странно подбирать параметры шаблона под конкретную специализацию, ты не считаешь?

КЛ>

вместо «специализация» стоило сказать инстанцияция


Re[6]: Непонятки с шаблонами.

От:

Roman Odaisky

Украина

 
Дата:  07.01.07 09:20
Оценка:

Здравствуйте, Константин Л., Вы писали:

КЛ>>не видно, что T шаблонный класс с 2-мя параметрами. На конкретную специализацию я даже не смотрел. Странно подбирать параметры шаблона под конкретную специализацию, ты не считаешь?


КЛ>вместо «специализация» стоило сказать инстанцияция

Там же хотели std::vector, а для этого надо template<template<class, class> class>. А если б там хотели еще и template <class X> class MySuperContainer, то это была бы уже другая задача. (Интересно, она вообще решается?)

До последнего не верил в пирамиду Лебедева.


Re[7]: Непонятки с шаблонами.

От:

remark

Россия

http://www.1024cores.net/
Дата:  08.01.07 00:54
Оценка:

Здравствуйте, Roman Odaisky, Вы писали:

RO>Там же хотели std::vector, а для этого надо template<template<class, class> class>. А если б там хотели еще и template <class X> class MySuperContainer, то это была бы уже другая задача. (Интересно, она вообще решается?)

Вот например:

#include <vector>
using namespace std;

template<template <class, class> class ContainerType>
struct std_container_wrapper
{
  template<typename T>
  struct helper
  {
    typedef ContainerType<T, allocator<T> > type;
  };
};

template<template <class> class ContainerType>
struct simple_wrapper
{
  template<typename T>
  struct helper
  {
    typedef ContainerType<T> type;
  };
};

template<template <class> class T>
struct StringCollection
{
 void Proc()
 {
  T<string>::type tv;
 }
};

template <class X> 
class MySuperContainer
{
};

int main()
{
  StringCollection<std_container_wrapper<vector>::helper> s;
  s.Proc();

  StringCollection<simple_wrapper<MySuperContainer>::helper> s2;
  s2.Proc();

  return 0;
}

Подождите ...

Wait...

  • Переместить
  • Удалить
  • Выделить ветку

Пока на собственное сообщение не было ответов, его можно удалить.

Понравилась статья? Поделить с друзьями:
  • Ошибка vector subscript out of range
  • Ошибка vector does not name a type
  • Ошибка vds basic provider что это
  • Ошибка vdm форд мондео 4
  • Ошибка vdc off инфинити что это такое