Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.68
Xtir
11 / 11 / 0
Регистрация: 10.07.2010
Сообщений: 130
#1

Как правильно объявить vector в классе? - C++

04.11.2010, 23:27. Просмотров 2874. Ответов 11
Метки нет (Все метки)

как правильно объявить вектор?
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <vector>
#include <algorithm>
 
using namespace std;
extern int map[60][60];
 
vector<pair<int, int> > wave;
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
 
CEnemy::CEnemy(int x, int y)
вот таким образом у меня всё работает, а вот как его объявить в классе?
C++
1
2
3
4
5
6
7
8
9
10
#include <vector>
#include <algorithm>
 
using namespace std;
 
class CEnemy  
{
public:
 
    vector<pair<int, int> > wave;
есть где ошибка? что нужно добавить или убрать? плиз
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.11.2010, 23:27
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как правильно объявить vector в классе? (C++):

Как объявить vector в классе? - C++
template&lt;typename NODETYPE&gt; class List { public: List(); ~List(); ... private: ... vector&lt;Node&lt;NODETYPE&gt; *&gt;...

Как в классе правильно объявить массив с константой в качестве размерности? - C++
Приветствую всех! Написал следующий код: Unit1.h class WireBare_Open { const int METAL_MAX; const int SECTION_MAX; ...

Vector<MyStruct> - как првильно объявить iterator - C++
struct _1C { string Tag; string Rus; string Eng; _1C(const string &amp;Tag, const string &amp;Rus, const string &amp;Eng) : Tag(Tag),...

Как объявить переменную в классе? - C++
Доброго времени суток. Как правильно объявить переменную в private: Делаю так: private: std::vector&lt;double&gt;* parameters = new...

Как объявить текстовую константу в классе? - C++
Добрый вечер. Нужно объявить текстовую константу в классе. Как это сделать? static const QString FAQ = &quot;faq.txt&quot;;Можно также просто как...

Как объявить вектор фиксированной длины в классе? - C++
Нужно создать поле класса - вектор из двух элементов. Но код: class A { private: std::vector&lt;int&gt; v (2); ... } ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
04.11.2010, 23:29 #2
Xtir, Так же. оО
Ну можно через typedef.
Вне класса.
C++
1
typedef vector<pair<int, int> > VPII;
В классе.

C++
1
VPII wave;
Xtir
11 / 11 / 0
Регистрация: 10.07.2010
Сообщений: 130
04.11.2010, 23:35  [ТС] #3
да вроде так не получается, может я ещё чего-то не знаю? ))
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
04.11.2010, 23:36 #4
Xtir, Ошибки в студию. Весь класс мб скинете?
Xtir
11 / 11 / 0
Регистрация: 10.07.2010
Сообщений: 130
04.11.2010, 23:40  [ТС] #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <vector>
#include <algorithm>
 
using namespace std;
 
class CEnemy  
{
public:
        vector<pair<int, int> > wave;
    CEnemy(int x, int y);
    virtual ~CEnemy();
 
    void Init();
    bool addWaypoint(int x1, int y1, int x2, int y2);
    void Show(int x, int y);
 
    int copymap[60][60];
    int wp;
    int posx, posy;
 
};
в таком случае ошибка вот такая:
Код
Compiling...
enemy.cpp
d:\program files\microsoft visual studio\vc98\mfc\include\afx.h(438) : fatal error C1001: INTERNAL COMPILER ERROR
        (compiler file 'msc1.cpp', line 1786)
а вот если делать как в первом примере я написал, то всё нормально работает
KpeHDeJIb
56 / 56 / 3
Регистрация: 31.10.2010
Сообщений: 103
05.11.2010, 00:00 #6
Цитата Сообщение от Xtir Посмотреть сообщение
в таком случае ошибка вот такая:
Эта ошибка с твоей программой никак не связана напрямую, попробуй обновить MSVS либо накати сервиспаки.
Xtir
11 / 11 / 0
Регистрация: 10.07.2010
Сообщений: 130
05.11.2010, 00:29  [ТС] #7
блин, может есть другой вариант сделать вектор не глобальным?
KpeHDeJIb
56 / 56 / 3
Регистрация: 31.10.2010
Сообщений: 103
05.11.2010, 00:38 #8
Цитата Сообщение от Xtir Посмотреть сообщение
блин, может есть другой вариант сделать вектор не глобальным?
Ну, можно засунуть в namespace:
C++
1
2
3
4
5
6
7
8
9
10
namespace space_ii
{
    typedef pair<int,int>   pair_ii;
    typedef vector<pair_ii> vector_ii;
 
    vector_ii wave;
}
 
// ...
space_ii::wave.push_back(space_ii::pair_ii(1,2));
Но не думаю что это для твоей задачи подходит, лучше обнови VS
Xtir
11 / 11 / 0
Регистрация: 10.07.2010
Сообщений: 130
05.11.2010, 04:25  [ТС] #9
обновил, тока теперь не хочет со статической библиотекой работать, такую ошибку выдаёт:
Код
nafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) already defined in libcpmtd.lib(delop.obj)
Debug/TankGame.exe : fatal error LNK1169: one or more multiply defined symbols found
со shared нормально работает...
KpeHDeJIb
56 / 56 / 3
Регистрация: 31.10.2010
Сообщений: 103
05.11.2010, 10:22 #10
Цитата Сообщение от Xtir Посмотреть сообщение
со shared нормально работает...
Ну, у тебя дв раза подключается библиотека, вот и ругается. Возможно даже подключаются разные версии, так что для начала удали все объектные файлы и сделай полный ребилд (rebuild all), если ошибка повториться - ищи где два раза подключаешь.
Xtir
11 / 11 / 0
Регистрация: 10.07.2010
Сообщений: 130
05.11.2010, 14:17  [ТС] #11
ну всё, вроде всё получилось, тока из папки debug приложение не хочет запускаться )
и ещё, что бы не создавать новую тему, вопросик не по теме и касается opengl...
напимер есть двумерный массив нулей и единичек, где 0 это пустое место, а 1 - стенка.
Так вот, пробовал делать вот так
C++
1
if(map[(int)posx*60/1200][(int)posy*60/1200] != 1) posx+=0.1;
как-то так, в таком случае мой объект останавливается ещё не доходя до стенки, и не могу придумать как сделать нормально..
пробовал проверять пиксели возле моего объекта, но этот вариант тоже неочень.
Так вот, хотел спросить, знает кто уже проверенный вариант, что бы не изобретать новый велосипед?
KpeHDeJIb
56 / 56 / 3
Регистрация: 31.10.2010
Сообщений: 103
05.11.2010, 16:23 #12
Цитата Сообщение от Xtir Посмотреть сообщение
ак вот, хотел спросить, знает кто уже проверенный вариант, что бы не изобретать новый велосипед?
Наверное моя духовная связь с миром программ слишком слаба, поэтому по одной вашей строчке кода не могу делать выводы о всей программе
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.11.2010, 16:23
Привет! Вот еще темы с ответами:

Как объявить в классе static-массив, не используя cpp файлы - C++
Есть шаблон. В шаблон в качестве аргумента надо передать массив. Именно в качестве аргумента шаблона, а не в качестве аргумента методов...

Как объявить массив объектов одного класса в другом классе, а затем поместить в него объекты? - C++
Как объявить массив объектов одного класса в другом классе, а затем поместить в него объекты?

Как правильно объявить структуру - C++
Всем доброго времени суток.Есть задача:Составить программу формирования данных об успеваемости студентов по дисциплине: фамилия И.О., 5...

Как правильно объявить fopen - C++
Доброго времени суток. наткнулся на некоторого рода проблемку. Не могу объявить fopen.. Описываю так как на MSDN написано , а компилятор...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
05.11.2010, 16:23
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru