Russian Qt Forum
Ноябрь 23, 2024, 20:58 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Разногласия между VS и mingw  (Прочитано 3816 раз)
fuCtor
Гость
« : Июль 07, 2009, 11:44 »

Компилирую код (шаблон). В студии все проходит без проблем. В mingw копилятор ругается:

Код
C++ (Qt)
#ifndef vList_h__
#define vList_h__
 
#include "types.h"
 
#include <vector>
#include <algorithm>
 
template < class T, int copacity = 32 >
class vList {
public:
vList(void) {
};
 
vList(int size) {
vector.reserve(size);
};
 
vList(vList& list) {
vector = list.vector;
};
 
~vList(void) {
};
 
vList & operator=(const vList& list) {
vector = list.vector;
return *this;
}
 
void AddItem(T item) {
vector.push_back(item);
};
 
   void RemoveItem( T item ) {
       std::vector< T >::iterator index = std::find(vector.begin(), vector.end(), item);
if(index!= vector.end())
vector.erase(index);
};
 
void RemoveItem(int index) {
vector.erase(vector.begin() + index);
};
 
void InsertItem(int index, T &item){
vector.insert(vector.begin() + index, item);
};
 
inline T * data() {
if (vector.empty())
return 0;
else
           return vector.get_allocator().address(vector[0]);
};
 
void reserve(int size){
vector.reserve(size);
};
 
inline T operator[](int index){
return vector[index];
};
 
inline int size(){
return vector.max_size();
};
 
inline int count(){
return vector.size();
};
 
inline bool empty(){
return (count())?false: true;
};
 
T first(){
return vector[0];
};
 
T last(){
return vector.end();
};
 
void asign(T *data, int count) {
vector.assign(data, data + count);
};
 
int capacity() {
return 32;
};
 
void SetCapacity(int capacity) {
};
 
void erase() {
vector.clear();
}
 
private:
       std::vector<T> vector;
};
#endif // vList_h__
 
 

В месте:
Код
C++ (Qt)
   void RemoveItem( T item ) {
       std::vector< T >::iterator index = std::find(vector.begin(), vector.end(), item);
if(index!= vector.end())
vector.erase(index);
};
 
вылитает ошибка:
 error: expected `;' before "index"

Не пойму в чем проблема.
« Последнее редактирование: Июль 07, 2009, 11:47 от fuCtor » Записан
Rcus
Гость
« Ответ #1 : Июль 07, 2009, 11:55 »

typename /**< \ref that_book page 500,935 */
Записан
fuCtor
Гость
« Ответ #2 : Июль 07, 2009, 12:12 »

Не совсем понял ответа.
Раньше в основном писал только на студии, да и то что писал на mingw компилировалось без проблем. Впервые столкнулся с такими ошибками. Видать стоит почитать спецификацию языка.
Записан
fuCtor
Гость
« Ответ #3 : Июль 07, 2009, 12:30 »

Еще компилятор ругается на такой код:

Код
C++ (Qt)
vStyle * style = AddStyle((v_guid)0,
vBrush(255, vBrush::bsSolid),
vPen(0, vPen::psSolid, 2, 0),
vFont());
error: no matching function for call to `vStyleManager::AddStyle(v_guid, vBrush, vPen, vFont)'
note: candidates are: vStyle* vStyleManager::AddStyle(v_guid, vStyle*)
note:                 vStyle* vStyleManager::AddStyle(v_guid, vBrush&, vPen&, vFont&)

Всегда считал, что к последнему варианту компилятор сам приведет, или что-то не так понял.
Записан
Rcus
Гость
« Ответ #4 : Июль 07, 2009, 12:45 »

Нужно не спецификацию читать, а ту самую книгу /* белую, увесистую, от Создателя Улыбающийся */
typename нужно дописать перед объявлением чтобы указать что данное выражение является типом, а не членом класса.
Про второе: в случае объявления параметра как константной ссылки компилятор сделает подстановку, но с mutable так не пройдет /** \ref черная книга Создателя, 3.7 Ссылки */
Записан
fuCtor
Гость
« Ответ #5 : Июль 07, 2009, 13:00 »

Вот к чему приводит умность компилятора ))

*пошел искать ту самую книгу*
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.103 секунд. Запросов: 21.