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-appError 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-appError 3 error C2238: unexpected token(s) preceding ‘;’ c:users<omitted>dropboxcomputer scienceprogrammingvisual studio
2012projectssfml-appsfml-appimagemanager.h 10 1 sfml-appError 4 error C2143: syntax error : missing ‘;’ before ‘<‘ c:users<omitted>dropboxcomputer scienceprogrammingvisual studio
2012projectssfml-appsfml-appimagemanager.h 10 1 sfml-appError 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-appError 6 error C2238: unexpected token(s) preceding ‘;’ c:users<omitted>dropboxcomputer scienceprogrammingvisual studio
2012projectssfml-appsfml-appimagemanager.h 10 1 sfml-appError 7 error C2065: ‘textureList’ : undeclared identifier c:users<omitted>dropboxcomputer scienceprogrammingvisual
studio 2012projectssfml-appsfml-appimagemanager.cpp 22 1 sfml-appError 8 error C2143: syntax error : missing ‘;’ before ‘<‘ c:users<omitted>dropboxcomputer scienceprogrammingvisual studio
2012projectssfml-appsfml-appimagemanager.h 10 1 sfml-appError 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-appError 10 error C2238: unexpected token(s) preceding ‘;’ c:users<omitted>dropboxcomputer scienceprogrammingvisual studio
2012projectssfml-appsfml-appimagemanager.h 10 1 sfml-app11 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
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 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 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 вектор определяется и код работает отлично, но если вынести класс в заголовочный файл — выдаёт ошибку, что вектор не является шаблоном: Заголовочный файл:
————————————————————————-
Кто-нибудь знает где ошибка?
0 |
programmer_08 681 / 439 / 208 Регистрация: 18.10.2020 Сообщений: 1,589 |
||||||||
22.05.2022, 16:02 |
2 |
|||||||
Решениеперенесите
в заголовочный файл.
в исполнительный файл
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 |
|||
перенесите Плохой совет. Не используй using namespace в глобальной области видимости. Подключи нужные заголовки и пиши std::vector.
static int count; Зачем она в секции public? Пользователь класса сможет менять его состояние ведь напрямую. Добавлено через 6 минут
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 вектор определяется и код работает отлично, но если вынести класс в заголовочный файл — выдаёт ошибку, что вектор не является шаблоном: Заголовочный файл:
————————————————————————-
Кто-нибудь знает где ошибка? 0 |
programmer_08 681 / 439 / 208 Регистрация: 18.10.2020 Сообщений: 1,589 |
||||||||
22.05.2022, 16:02 |
2 |
|||||||
Решениеперенесите
в заголовочный файл.
в исполнительный файл 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 |
|||
перенесите Плохой совет. Не используй using namespace в глобальной области видимости. Подключи нужные заголовки и пиши std::vector.
static int count; Зачем она в секции public? Пользователь класса сможет менять его состояние ведь напрямую. Добавлено через 6 минут
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-appError 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-appError 3 error C2238: unexpected token(s) preceding ‘;’ c:users<omitted>dropboxcomputer scienceprogrammingvisual studio
2012projectssfml-appsfml-appimagemanager.h 10 1 sfml-appError 4 error C2143: syntax error : missing ‘;’ before ‘<‘ c:users<omitted>dropboxcomputer scienceprogrammingvisual studio
2012projectssfml-appsfml-appimagemanager.h 10 1 sfml-appError 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-appError 6 error C2238: unexpected token(s) preceding ‘;’ c:users<omitted>dropboxcomputer scienceprogrammingvisual studio
2012projectssfml-appsfml-appimagemanager.h 10 1 sfml-appError 7 error C2065: ‘textureList’ : undeclared identifier c:users<omitted>dropboxcomputer scienceprogrammingvisual
studio 2012projectssfml-appsfml-appimagemanager.cpp 22 1 sfml-appError 8 error C2143: syntax error : missing ‘;’ before ‘<‘ c:users<omitted>dropboxcomputer scienceprogrammingvisual studio
2012projectssfml-appsfml-appimagemanager.h 10 1 sfml-appError 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-appError 10 error C2238: unexpected token(s) preceding ‘;’ c:users<omitted>dropboxcomputer scienceprogrammingvisual studio
2012projectssfml-appsfml-appimagemanager.h 10 1 sfml-app11 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
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 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 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;
}
- Переместить
- Удалить
- Выделить ветку
Пока на собственное сообщение не было ответов, его можно удалить.