tserber
|
journeyman
|
|
|
|
Рег.: 18.10.2007
|
Сообщений: 90
|
|
Рейтинг: -31
|
|
C++ и Visual Studio
02.01.2008 00:47
|
|
|
Почему в Visual Studio нельзя объявлять несколько раз операторы? Например, пишу
code:
namespace MyComplex
{
public class Complex
{
bool operator==(Complex c1, Complex c2);
};
Complex::operator==(Complex c1, Complex c2)
{
//...//
}
}
после чего получаю какую-то ошибку (в том духе, что дескать уже объявлен такой оператор (но я же его объявил, но определил-то один раз только)). Кроме того, компилятор пишет, что аргументов слишком много, хотя пишу все так же, как и в Штрауструпе.
А еще - те операторы, которые все-таки удалось написать без ошибок, Visual Studio "не воспринимает", т.е. - воспринимает
code:
cp1->operator >(cp2)
но не воспринимает code:
cp1 >cp2
Где искать подвох?
|
|
solver85
|
|
|
|
|
Рег.: 30.01.2007
|
Сообщений: 182
|
|
Рейтинг: 199
|
|
|
>public class Complex это новое слово в С++?
и это тоже: >Complex::operator==(Complex c1, Complex c2)
он же раньше булом уже объявлен
|
|
tserber
|
journeyman
|
|
|
|
Рег.: 18.10.2007
|
Сообщений: 90
|
|
Рейтинг: -31
|
|
|
Quote:
>public class Complex это новое слово в С++?
Это о чем вы?
Quote:
и это тоже: >Complex::operator==(Complex c1, Complex c2)
он же раньше булом уже объявлен
Ну это я сплоховал, не дописал bool, но ошибку все равно выдает.
|
|
tserber
|
journeyman
|
|
|
|
Рег.: 18.10.2007
|
Сообщений: 90
|
|
Рейтинг: -31
|
|
|
И что тогда лучше всего установить, чтобы все коды, переписанные из Штрауструпа, нормально копмпилились, а то уже не в первой у разных копмиляторов разные глюки.
|
|
vozbu
|
karamba
|
|
|
|
Рег.: 14.11.2004
|
Сообщений: 4856
|
|
Рейтинг: 1057
|
|
|
Судя по сообщениям - только прямые руки. А, ну еще свежую голову, чтобы без ошибок переписывать примеры из Страуструпа. Думаю, он не мог написать "public class Complex".
|
С тех пор, как изобрели речь, люди не могут договориться друг с другом.
|
|
Mike
|
Ызарг
|
|
|
|
Рег.: 02.11.2002
|
Сообщений: 8098
|
|
Рейтинг: 2147
|
|
|
Quote:
Кроме того, компилятор пишет, что аргументов слишком много, хотя пишу все так же, как и в Штрауструпе.
А что, Страуструп уже написал книгу по Managed C++? Это я про объявление "public class Complex". Аргументов у оператора слишком много, и мне слабо верится, что в твоей книге именно так и написано. Попробуй написать вот так:code: class Complex
{
public:
friend bool operator==(const Complex& c1, const Complex& c2);
};
inline bool operator==(const Complex& c1, const Complex& c2)
{
return false;
}
Quote:
А еще - те операторы, которые все-таки удалось написать без ошибок, Visual Studio "не воспринимает", т.е. - воспринимает
Это все потому, что ты сравниваешь не классы, а указатели.
|
|
yegor
|
old hand
|
|
|
|
Рег.: 17.05.2006
|
Сообщений: 876
|
|
Рейтинг: 815
|
|
|
g++
|
Пользователю все равно, в какой системе не разбираться. |
|
tserber
|
journeyman
|
|
|
|
Рег.: 18.10.2007
|
Сообщений: 90
|
|
Рейтинг: -31
|
|
Re: C++ и Visual Studio
[re: Mike]
02.01.2008 15:23
|
|
|
Спасибо, понял, все наладилось, кажись!
|
|
eyescream
|
nächste Riff
|
|
|
|
Рег.: 20.02.2005
|
Сообщений: 426
|
|
Рейтинг: 392
|
|
|
Раз уж начал писать прямо в объявлении, там бы и писал, метод-то простой. Только аргумент у такого оператора должен быть один - Complex that (или const Complex &that, что будет правильнее), поскольку this у тебя и так есть.
Итого:
code:
class Complex
{
private:
double re, im;
public:
bool operator==(const Complex &that) const
{
return (im == that.im) && (re == that.re);
}
};
|
Current Mortal Sin: гордыня. Current Wise Thought: was ist wenn der Vorhang fällt? |
|
eyescream
|
nächste Riff
|
|
|
|
Рег.: 20.02.2005
|
Сообщений: 426
|
|
Рейтинг: 392
|
|
|
|