C++ и Visual Studio

Retor

Почему в Visual Studio нельзя объявлять несколько раз операторы? Например, пишу
    
namespace MyComplex
{

public class Complex
{
bool operator==(Complex c1, Complex c2);
};


Complex::operator==(Complex c1, Complex c2)
{
//...//
}


}

после чего получаю какую-то ошибку (в том духе, что дескать уже объявлен такой оператор (но я же его объявил, но определил-то один раз только. Кроме того, компилятор пишет, что аргументов слишком много, хотя пишу все так же, как и в Штрауструпе.
А еще - те операторы, которые все-таки удалось написать без ошибок, Visual Studio "не воспринимает", т.е. - воспринимает
 
cp1->operator >(cp2)


но не воспринимает
 
cp1 >cp2


Где искать подвох?

psix75

>public class Complex
это новое слово в С++?
и это тоже:
>Complex::operator==(Complex c1, Complex c2)
он же раньше булом уже объявлен

Retor

>public class Complex
это новое слово в С++?
Это о чем вы?
и это тоже:
>Complex::operator==(Complex c1, Complex c2)
он же раньше булом уже объявлен
Ну это я сплоховал, не дописал bool, но ошибку все равно выдает.

Retor

И что тогда лучше всего установить, чтобы все коды, переписанные из Штрауструпа, нормально копмпилились, а то уже не в первой у разных копмиляторов разные глюки.

erotic

Судя по сообщениям - только прямые руки. А, ну еще свежую голову, чтобы без ошибок переписывать примеры из Страуструпа. Думаю, он не мог написать "public class Complex".

kokoc88

Кроме того, компилятор пишет, что аргументов слишком много, хотя пишу все так же, как и в Штрауструпе.
А что, Страуструп уже написал книгу по Managed C++? Это я про объявление "public class Complex". Аргументов у оператора слишком много, и мне слабо верится, что в твоей книге именно так и написано. :crazy: Попробуй написать вот так:
class Complex
{
public:
friend bool operator==(const Complex& c1, const Complex& c2);
};

inline bool operator==(const Complex& c1, const Complex& c2)
{
return false;
}

А еще - те операторы, которые все-таки удалось написать без ошибок, Visual Studio "не воспринимает", т.е. - воспринимает

Это всё потому, что ты сравниваешь не классы, а указатели.

oliver11

g++

Retor

Спасибо, понял, все наладилось, кажись! :D

valodyr

Раз уж начал писать прямо в объявлении, там бы и писал, метод-то простой. Только аргумент у такого оператора должен быть один — Complex that (или const Complex &that, что будет правильнее поскольку this у тебя и так есть.
Итого:

class Complex
{
private:
double re, im;

public:
bool operator==(const Complex &that) const
{
return (im == that.im) && (re == that.re);
}
};

valodyr

Да и ваще, гугл как всегда всех умнее и милее.
http://yanivhamo.com/material/example_of_complex.pdf
Оставить комментарий
Имя или ник:
Комментарий: