Russian Qt Forum

Программирование => С/C++ => Тема начата: fuCtor от Июль 07, 2009, 11:44



Название: Разногласия между VS и mingw
Отправлено: 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"

Не пойму в чем проблема.


Название: Re: Разногласия между VS и mingw
Отправлено: Rcus от Июль 07, 2009, 11:55
typename /**< \ref that_book page 500,935 */


Название: Re: Разногласия между VS и mingw
Отправлено: fuCtor от Июль 07, 2009, 12:12
Не совсем понял ответа.
Раньше в основном писал только на студии, да и то что писал на mingw компилировалось без проблем. Впервые столкнулся с такими ошибками. Видать стоит почитать спецификацию языка.


Название: Re: Разногласия между VS и mingw
Отправлено: fuCtor от Июль 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&)

Всегда считал, что к последнему варианту компилятор сам приведет, или что-то не так понял.


Название: Re: Разногласия между VS и mingw
Отправлено: Rcus от Июль 07, 2009, 12:45
Нужно не спецификацию читать, а ту самую книгу /* белую, увесистую, от Создателя :) */
typename нужно дописать перед объявлением чтобы указать что данное выражение является типом, а не членом класса.
Про второе: в случае объявления параметра как константной ссылки компилятор сделает подстановку, но с mutable так не пройдет /** \ref черная книга Создателя, 3.7 Ссылки */


Название: Re: Разногласия между VS и mingw
Отправлено: fuCtor от Июль 07, 2009, 13:00
Вот к чему приводит умность компилятора ))

*пошел искать ту самую книгу*