VC++

8 отговора 388 прегледа
#1

VC++

Какъв му е проблема на глупавото VC++ !?

Имам следната ситуация:



class A
{
private:
char * data;

public:
operator char * () const
{
return data;
}

char & operator (unsigned _pos)
{
return data[_pos];
}
};

.....

A a;
.....

a[1] = '1' // error C2666
.....



Не знаел кой оператор да използва - стандартния [](char *, int) или предефинирания [](int) в класа !?
К'во толко да не му е ясно? Вorland C++ 5.5 си го компилира (и работи както се очаква) без грижи! Използва си предефинирания оператор и толко. А VC-то неще. Аз да не съм го написал тоя оператор само защото ми е било скучно!

Как да излъжа VC-то и има ли някоя "pragma" да изключа тез тъпотии, т.е. да го накарам да прави това, което искам. Баси!

Отговор
в отговор на - #2

Re: VC++

problema e che operatora ti e s parametur unsigned, a 1-to e po podrazbirane int
reshenijata sa dve - ili pravish operatora da vzema int, ili kudeto vikash go vikash cast-vash kum unsigned ( a[static_cast<unsigned>(1)] )
po estestvenoto e purvoto - naj malkoto zashtoto i standartnija [] operator vzema int

Отговор
в отговор на mentor #3

Re: VC++

С "int" работи! Баси! Обаче....се намалява диапазона точно 2 пъти....кофти.
Продължавам да мисля, че VC++ e много сбъркан компилатор.

Thanks.

Отговор
в отговор на - #4

Re: VC++

Можеш да използваш 1u вместо 1, но най-добре си направи 2 функции.

Контрольорите приличат на Супермен.
Отговор
в отговор на - #5

Re: VC++

Na kalpavia programist, kompilatora mu e vinoven.

Отговор
в отговор на - #6

probvai online test-compilera na comeau

[линк]

Toj sushto smjata che koda e greshen,

ili trjabwa samo edinia ot operatorite da si definirash, ili operatora s kwadratnite skobki trjabwa da ti e int.

Comeau twurdjat che tehnia kompilator spazwa pulnia C++ standart.


class A
{
private:
char * data;

public:
// Komentiraj tova
operator char * () const
{
return data;
}

// Ili tova
// Ili wmesto da go komentirash go smeni sus int, ili puk wizh suobshteniata za greshki na Comeau
char & operator [ ] (unsigned _pos)
{
return data[_pos];
}
}

int main( int argc, char *argv[ ] )
{
A a;
a[ 1 ] = '1'
}


tirulirutatuutuu
Отговор
в отговор на malkia #7

Относно компилаторите...

1. Borland C++ 5.5 (и Borland C++ Builder) с включена опция ANSI и "All Warnings On" и изключени "Borland Specific" го компилира без никакви съобщения.

2. GNU's GCC - версията с RedHat 7.2 го компилира без никакви съобщения.

3. VC++ се жалва.

Друг компилатор нямам под ръка.

Отговор
в отговор на - #8

Re: VC++

Ne se zaiajdam, no imash i edna logicheska greshka:

operator char * () const
{
return data;
}

trebva da e:

operator const char * () const
{
return data;
}

ili

operator char * ()
{
return data;
}

, a moje i dvata da gi imash definirani.

Отговор
в отговор на - #9

Re: Относно компилаторите...

obshto wzeto ot tebe zawisi dali tova go iskash portable, ili ne.

Na rabota nie izpolzwame gcc(ps2ee-2.95.3, 2.96), MSVC 7.00 i Code Warrior za PPC (ne mu znam tochnata versia).

Pravim wsichko wuzmozhno taka che koda da e portable mezhdu razlichnite platformi.

Poslednoto koeto ni ostava e da se oplakwame - prosto njama da ni dadat pari za tova.

Prosto idealen kompilator njama... Za tova ima shto gode moshten preprocesor...

I wupreki tova e dobre Microsoft da wzemat da si stegnat C++ kompilatora - daleko ot standarta e ;) (taka pone kazwat specialistite - az po princip sum C-only fen) - i wadi chesto izlishni warningi.

tirulirutatuutuu
Отговор