当前位置: 首页 > 知识库问答 >
问题:

STD::oStream识别不定义报头

薛宏壮
2023-03-14

我创建了以下代码:

#include <iostream>
#include "Quote.h"

int main()
{
    derived().print(std::cout);

    getchar();
    return 0;
}
#pragma once
#include <string>

class base {
public:
    std::string name() { return basename; }
    virtual void print(std::ostream &os) { os << basename; }

private:
    std::string basename = "abc";
};

class derived : public base {
public:
    void print(std::ostream &os) { base::print(os); os << " " << i; }

private:
    int i = 0;
};

如果我没有像预期的那样在main.cpp中包含iostream头文件,则无法识别STD::Cout。我的问题是:如果不包括iostream,为什么在quote.h中使用std::oStream没有问题?。在前面提到的库中,将cout定义为ostream,为什么cout的使用是一个问题而ostream不是?

我使用VS2017,以防这些信息很重要。

共有1个答案

仲孙宇定
2023-03-14

标头 使用std::ostream声明一个输出运算符。您所使用的实现似乎在某种程度上使std::ostream普遍可用。

C++标准定义了哪些头使哪些声明至少可用。它并不禁止提供额外的名称。不同的实现可以选择不使声明可用。我尝试在我的实现中严格地只提供强制声明,但这并不像听起来那么简单。

 类似资料:
  • 我想这样使用std::ostream: 有一个错误,说ostream构造函数受到保护: 错误:'std::basic_ostream 但我记得

  • 我在下面的某个地方看到了代码片段。 由于前面提到的代码片段工作得很好,它表明std::cout是从std::ostream派生而来的。但我还找不到任何直接的参考资料。 根据文件,其中说[强调我的]: 全局对象std::cout和std::wcout控制输出到实现定义类型的流缓冲区(源自std::stream buf),与标准C输出流stdout相关联。 上面的引文表示,控制输出到派生自std::s

  • 我不能为一个项目用cucumber执行简单的测试。我在Intellij13社区,使用cucumber插件。 我在features目录中编写了我的features文件,我还通过插件实现了创建它们的步骤。intellij可以识别功能文件中的我的步骤,它可以导航并转到步骤实现。当我尝试运行我的场景时,if无法声明“未定义的步骤”。任何帮助都将不胜感激。 以下是我如何组织我的项目:

  • 问题内容: 有什么好的方法可以帮助您识别项目中未使用的CSS定义?一堆css文件被拉进来了,现在我正在尝试清理一些东西。 问题答案: Chrome开发者工具有一个“ 审核”标签,其中可以显示未使用的CSS选择器。 运行审核,然后在“ 网页性能”下,参阅“ 删除未使用的CSS规则”

  • 我正在尝试为产品名称及其型号构建一个自定义命名实体提取器。 我的用例包含这样的句子:“微软使用了ABC-300产品,并将其与ASQ集成”。上述句子中提到的产品是:ABC-300和ASQ 我已经尝试使用Stanford和Spacy NER,两者的准确性都低于预期。 是否有任何数据集包含段落或句子中的产品名称,我可以用于训练自定义NER模型?训练的句子可以简单也可以复杂。任何类型的数据都很有用。 关于

  • # 5.1 自定义报告是什么? {#51-自定义报告是什么?} 在进行网站分析的时候,通常需要关联多个维度进行分析, 同时根据不同组合维度,选取合适的衡量指标。 例如,衡量 广告流量 达成的事件数 或 不同来源流量的所使用客户端及其地域分布。 在默认报告中,系统提供了单个维度的分析视角。 而自定义报告则可实现关联不同分析维度,衡量站点数据表现。 示例如下: 维度1 维度2 维度3 衡量指标 广告维