class Vehicle
{
public:
//[...]
virtual std::ostream& ostreamOutput(std::ostream&) const; // virtual in order to use it for subclasse like cars, busses etc.
virtual double Speed() const; //returns the speed of a vehicle, is implemented in derived classes
private:
int Number
std::string Name
//[...]
protected:
int MaxSpeed; //these variables were also needed in the derived classes
};
std::ostream& Vehicle::ostreamOutput(std::ostream& os) const
{
os << std::resetiosflags(std::ios::right) << std::setiosflags(std::ios::left) << std::setfill(' ') << ""
<< std::setw(4) << Number
<< std::setw(9) << Name
<< std::setw(15) << Speed()
<< std::setw(5) << MaxSpeed
return os;
}
std::ostream& operator<<(std::ostream& os, const Vehicle& x)
{
x.ostreamOutput(os);
return os;
}
main() //I wanted to overload the "<<"-Operator in order to print the vehicle information without //a seperate function
{
Vehicle Vehicle1("Vehicle1", 80);
std::cout << Vehicle1 << std::endl;//the first shift-operator contains the error
}
Я пытался перегружать Shiftoperator, но я получаю сообщение об ошибке с именем: «ошибка c2679 двоичного„“не оператора найден, который принимает правый операнд типа».Перегрузка оператора <<
Ошибка произошла в первом Операторе сдвига в функции main
. Я хочу напечатать Vehicle
и его производные классы с перегруженным оператором.
Можете ли вы объяснить мне ошибку? Я действительно не знаю, как исправить это.
Спасибо за ваш ответ. Я разделил код, как и сказал, к сожалению, он не исправляет ошибку. Когда я держу указатель мыши над оператором сдвига, он показывает мне: Ошибка оператора '<<' соответствует этим операндам. Типы операндов: std :: ostream << Vehicle. – AlTrain
@AlTrain, но вы на самом деле пытались его скомпилировать? Когда вы держите мышь над исходной строкой, скорее всего, работают внутренние эвристики IDE, а не настоящий компилятор. Их легко смущает C++. Я проверил этот источник с g ++ 4.8 и clang 3.4, оба довольно старые. Что касается расщепления источника, он должен просто облегчить поиск реальной строки ошибки, но она не может решить проблему никоим образом. – gluk47
Я опубликовал части моей программы, которые важны для вопроса, поэтому я скомпилировал его в своей программе (со всеми инициализированными переменными производных классов и т. Д., Которые я уже тестировал, ошибки не было/ошибкой), и это все равно дает мне та же ошибка. Я использую Visual Studio 2012. Кстати, объявления const корректны? – AlTrain