Перегруженный оператор & lt; & lt; выводит значение bool. Зачем?

xml_attribute.h

#pragma once
#ifndef XML_ATTRIBUTET_H
#define XML_ATTRIBUTET_H

#include <string>
#include <iostream>

struct XML_AttributeT{

std::string tag;
std::string value;

//constructors
explicit XML_AttributeT(std::string const& tag, std::string const& value);
explicit XML_AttributeT(void);

//overloaded extraction operator
friend std::ostream& operator << (std::ostream &out, XML_AttributeT const& attribute);
};
#endif

xml_attribute.cpp

#include "xml_attribute.h"
//Constructors
XML_AttributeT::XML_AttributeT(std::string const& tag_, std::string const& value_)
: tag{tag_}
, value{value_}
{}
XML_AttributeT::XML_AttributeT(void){}

//overloaded extraction operator
std::ostream& operator << (std::ostream &out, XML_AttributeT const attribute){
return out << attribute.tag << "=" << attribute.value;
}

driver.cpp

#include <iostream>
#include <cstdlib>
#include "xml_attribute.h"
int main(){
using namespace std;

XML_AttributeT a();
cout << a << endl;

return EXIT_SUCCESS;
}

Выходные данные драйвера — «1», но я хочу, чтобы это был знак «=».
Почему выводит ссылку на a?
Если я изменю XML_AttributeT a(); в XML_AttributeT a; это даже не компилируется.

Что я сделал не так?

0

Решение

Крис это правильно. Ваша первоначальная проблема заключается в том, что XML_AttributeT a() интерпретируется как объявление функции. clang++ на самом деле предупредит вас об этом:

Untitled.cpp:33:21: warning: empty parentheses interpreted as a function declaration [-Wvexing-parse]
XML_AttributeT a();

Ты можешь использовать a{} вместо этого, чтобы исправить это.

В этот момент вы получаете новую ошибку:

Untitled.cpp:34:10: error: use of overloaded operator '<<' is ambiguous (with operand types 'ostream' (aka 'basic_ostream<char>') and 'XML_AttributeT')
cout << a << endl;

Это из-за того, что сказал Джогожапан. Ваш реализован operator<< использует XML_AttributeT const в качестве типа атрибута вместо XML_AttributeT const &, Если вы исправите это, он скомпилируется и даст вам желаемый результат.

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]