gpt4 book ai didi

c++ - 重载运算符 << 输出 bool 值。为什么?

转载 作者:太空宇宙 更新时间:2023-11-04 16:25:19 55 4
gpt4 key购买 nike

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_属性.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;
}

驱动.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;,它甚至无法编译。

我做错了什么?

最佳答案

克里斯是对的。您最初的问题是 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;

这是因为jogojapan说的。您实现的 operator<<正在使用 XML_AttributeT const作为属性类型而不是 XML_AttributeT const & .如果您修复了该问题,它就会编译并为您提供所需的结果。

关于c++ - 重载运算符 << 输出 bool 值。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12487393/

55 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com